1

在我的代码中,我使用 aCGridView并通过 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这种行为?

4

1 回答 1

0

第一个解决方案:

我为此类问题找到的最佳解决方案之一是您必须为按钮使用动态 id,这样当它加载 ajax 响应并绑定到 javascript 函数时,事件总是与新 id 绑定,因此只需单击一次.

您可以使用time() 按钮 id 使其动态化。

或者

这种问题的第二种解决方案并不容易使其实用,但这要好得多。

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

于 2013-07-27T08:43:28.140 回答