2013-07-27 55 views
1

在我的代码中,我使用了CGridView并通过ajax调用多次呈现它以向用户列出不同类型的数据。在其列之一,我有一个CButtonColumn负责运行javascript function.it是我列代码:CGridView引发多个点击事件

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

首个解决方案:

一个我没有发现这样的问题的最佳解决方案之一是,你必须使用动态ID为按钮,这样当它加载在Ajax响应&绑定到JavaScript函数,事件总是绑定新的ID,所以他们只会一次点击。

您可以使用带有按钮ID的time()使其成为动态。

或者

第二种解决这样的问题也不是那么容易让它实用,这是好多了。

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