【问题标题】:CGridView raises multiple on click eventsCGridView 引发多个点击事件
【发布时间】:2013-07-27 03:20:58
【问题描述】:

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

【问题讨论】:

    标签: binding yii cgridview


    【解决方案1】:

    第一个解决方案:

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

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

    或者

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-26
      • 1970-01-01
      • 1970-01-01
      • 2021-11-19
      相关资源
      最近更新 更多