我有一个视图,可以在CListView
和Highcharts图形中呈现一些数据。
请注意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
,但未定义)。
问题出在哪里?我该如何解决?
答案 0 :(得分:0)
//init
$('#container').highcharts({});
//select onchange
$('#container').highcharts().destroy();
答案 1 :(得分:0)
如下面的错误链接
页面中已定义的Highcharts
第二次在同一页面中加载Highcharts或Highstock时会发生此错误,因此已经定义了Highcharts命名空间。请记住Highcharts.Chart构造函数和Highcharts的所有功能都包含在Highstock中,因此如果您组合运行Chart和StockChart,则只需加载highstock.js文件。
您正在加载highcharts javascript两次。你可以尝试
a)在第一次加载时启用highcharts,然后在下一次加载时禁用它,例如可能检查是否ajax
b)使用自定义javascript检查是否已加载高级图表,如this blog post
c)使用为您处理js和css加载的NLSClientScript extension
我建议你使用最后一个。直到我发现它,我才被这个问题咬了几次。它消除了挑出每个javascript函数/文件的需要。
修改强>
您可以编辑代码以使用相同的update
函数,而不是编辑listview js:
<?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"
});'
));
?>