在我的代码中,我正在使用CGridView
并通过ajax调用多次渲染它以向用户列出不同类型的数据。在其中一个列中,我有CButtonColumn
,负责运行javascript
函数。这是我的列代码:
array(
'class' => 'CButtonColumn',
'template' => '{archive}',
'buttons' => array(
'archive' => array(
'url' => 'Controller::createUrl("/form/sendToArchive", array("flowId" => $data->id))',
'label' => Yii::t('app', 'Archive'),
'click' => 'function (){sendToArchive(this.href);return false;}',
'imageUrl' => '/themes/negin/images/archive.png',
'visible' => '$data->canBeArchived() ? true : false',
),
),
),
我的问题是一个常见的问题,但我仍然没有任何好的解决方案。在每次ajax调用之后,CGridView被渲染,我的click
事件多次绑定到CButtonColumn
。如何防止CGridView
出现此行为?
答案 0 :(得分:0)
第一个解决方案:
我遇到过这种问题的最佳解决方案之一就是你必须为按钮使用动态id,这样当它加载到ajax响应时就会出现这种情况。绑定到javascript函数,事件总是与新id绑定,因此只需单击一次。
您可以将time()
与按钮ID一起使用,以使其动态化。
或者
解决这个问题的第二个解决方案并不容易实现,但这要好得多。
始终从ajax调用以json格式响应您的数据,不包含任何html或javascript代码。 使用jQuery或任何客户端脚本语言从json响应在客户端创建视图。 JSON是轻量级的他们不是html& js数据所以你的ajax响应会快得多,它也会提高你的应用程序性能。