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/16
: http://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函数/文件的需要。
编辑
您可以编辑代码以使用相同的update
function,而不是编辑listview js:
'Daily', 'm'=>'Monhly' ), array( 'onChange'=>'$.fn.yiiListView.update("your-list-id", { data: {"usage":$(this).val()}, type: "POST" });' )); ?>