Highcharts,Yii和身体内容重新加载

我有一个视图,在CListView和Highcharts图形中呈现一些数据。

请注意, CListView的寻呼机以下列方式工作:它向服务器请求“新页面”,服务器呈现页面的整个内容并将其发送到CListView 。 然后用正在发送的内容替换正文,例如: $('body').html(rendered_html_response)

我还有一个模仿这种行为的dropDownList 。 这是代码:

 '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/16http://www.highcharts.com/errors/16

我试过highcharts.src.js这种方式禁用highcharts.src.js

 public function beforeAction(){ if(Yii::app()->request->isAjaxRequest){ Yii::app()->clientScript->scriptMap['highcharts.src.js'] = false; } return true; } 

但后来我得到了典型的undefined javascript错误(意味着某些东西正在尝试使用undefined Highcharts )。

问题在哪里,我该如何解决?

 //init $('#container').highcharts({}); //select onchange $('#container').highcharts().destroy(); 

如下面的错误链接所示

Highcharts已在页面中定义

第二次在同一页面中加载Highcharts或Highstock时会发生此错误,因此已经定义了Highcharts命名空间。 请记住Highcharts.Chart构造函数和Highcharts的所有function都包含在Highstock中,因此如果您组合运行Chart和StockChart,则只需加载highstock.js文件。

您正在加载highcharts javascript两次。 你可以试试

a)在第一次加载时启用highcharts,然后在下一次加载时禁用它,例如,可能检查ajax

b)使用自定义javascript来检查是否已按照此博客文章中的方式加载了高级图表

c)使用NLSClientScript扩展为您处理js和css加载

我建议你使用最后一个。 直到我发现它,我才被这个问题咬了几次。 它消除了挑出每个javascript函数/文件的需要。

编辑

您可以编辑代码以使用相同的updatefunction,而不是编辑listview js:

 'Daily', 'm'=>'Monhly' ), array( 'onChange'=>'$.fn.yiiListView.update("your-list-id", { data: {"usage":$(this).val()}, type: "POST" });' )); ?>