CGridView引发了多个点击事件

时间:2013-07-27 03:20:59

标签: binding yii cgridview

在我的代码中,我正在使用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出现此行为?

1 个答案:

答案 0 :(得分:0)

第一个解决方案:

我遇到过这种问题的最佳解决方案之一就是你必须为按钮使用动态id,这样当它加载到ajax响应时就会出现这种情况。绑定到javascript函数,事件总是与新id绑定,因此只需单击一次。

您可以将time()与按钮ID一起使用,以使其动态化。

或者

解决这个问题的第二个解决方案并不容易实现,但这要好得多。

始终从ajax调用以json格式响应您的数据,不包含任何html或javascript代码。 使用jQuery或任何客户端脚本语言从json响应在客户端创建视图。 JSON是轻量级的他们不是html& js数据所以你的ajax响应会快得多,它也会提高你的应用程序性能。