我有一个视图,可以在CListView和高级图表中呈现一些数据。
请注意,CListView的寻呼机工作方式如下:它向服务器请求“新页面”,服务器呈现页面的整个内容并将其发送给CListView。然后将正文替换为正在发送的内容,类似于这样的内容:$('body').html(rendered_html_response)。
我还有一个模仿这种行为的dropDownList。这是代码:
<?php
echo CHtml::dropDownList('usage', 'cg', array(
'd'=>'Daily',
'm'=>'Monhly'
), array(
'ajax'=>array(
'type'=>'POST',
'url'=>$this->createUrl('admin/user', array(
'id'=>$user->id)
),
'update'=>'body',
'data'=>array('cg'=>'js:$(this).val()'),
'options'=>array(
Yii::app()->session['cg']=>array(
'selected'=>true
)
)
)
));
?>不管怎样,有个问题。当我使用CListView时,一切都很正常(比如:页面内容被刷新,页面被重新加载,图表和数据被正确呈现等等),但是当我选择使用dropDownList的内容时,服务器呈现答复并发送给客户端,客户端开始替换body的内容,但是我得到了这个错误:http://www.highcharts.com/errors/16。
我试着用这种方式禁用highcharts.src.js:
public function beforeAction(){
if(Yii::app()->request->isAjaxRequest){
Yii::app()->clientScript->scriptMap['highcharts.src.js'] = false;
}
return true;
}但是,我得到了典型的undefined javascript错误(这意味着有东西试图使用Highcharts,这是没有定义的)。
问题在哪里,我如何解决?
发布于 2014-06-30 14:07:36
//init
$('#container').highcharts({});
//select onchange
$('#container').highcharts().destroy();发布于 2014-06-30 14:44:14
如下所示,错误链接显示
已在页面中定义的高级图表 当第二次在同一页面中加载High图表或Highstock时,就会发生此错误,因此就已经定义了High图表命名空间。请记住,Highcharts.Chart构造函数和High图表的所有功能都包含在Highstock中,因此,如果您同时运行图表和StockChart,则只需加载highstock.js文件。
您将加载高级图表javascript两次。你可以试试
( a)在第一次加载时启用高级图表,然后在下一次加载时禁用它,例如可能检查ajax是否
( b)使用自定义javascript检查是否像在这篇博客文章中加载了高级图表
c)使用为您处理js和css加载的NLSClientScript扩展。
我建议你用最后一个。我被这个问题咬了好几次,直到我发现它。它消除了单独列出每个javascript函数/文件的需要。
编辑
与编辑listview js不同,您可以编辑代码以使用相同的update函数:
<?php
echo CHtml::dropDownList('usage', 'cg', array(
'd'=>'Daily',
'm'=>'Monhly'
), array(
'onChange'=>'$.fn.yiiListView.update("your-list-id", {
data: {"usage":$(this).val()},
type: "POST"
});'
));
?>https://stackoverflow.com/questions/24491578
复制相似问题