Yii CGridView - 设置默认的afterAjaxUpdate回调

时间:2013-11-04 15:12:36

标签: php ajax yii cgridview select-menu

有人知道在CGridView中设置默认函数的可能性,它会在每次AJAX更新后在页面上的所有网格上运行吗? 我在许多页面上使用CGridView,我不想分别为每个网格指定这个函数。 我需要这个,因为我使用jQuery selectmenu作为我的过滤器下拉列表,并且在AJAX重新加载之后,它们需要再次被反复使用。

'afterAjaxUpdate' => "function(id,data){$('select').selectmenu()}";

2 个答案:

答案 0 :(得分:6)

请参阅值http://www.yiiframework.com/doc/api/1.1/CGridView#afterAjaxUpdate-detail

的格式
  

在收到成功的AJAX响应后将调用的javascript函数。函数签名是函数(id,data),其中'id'表示网格视图的ID,'data'表示接收到的ajax响应数据。

您需要设置

'afterAjaxUpdate' => "function(id,data){$('select').selectmenu()}";

<强>更新:

除了创建CGridView的子项并设置$afterAjaxUpdate的值之外,我没有看到其他方法。这是代码:

class GridView extends CGridView{
    public $afterAjaxUpdate = "function(id,data){$('select').selectmenu()}";
}

<强>更新:

我查看了widget的源代码和仅在方法afterAjaxUpdate中使用的属性registerClientScript。这就是我提出另外一个解决方案的原因。首先 - 您可以在继承类的init中更改afterAjaxUpdate的值:

public function init(){
    parent::init(); // after setting all values reset value to desire
    $this->afterAjaxUpdate = "function(id,data){$('select').selectmenu()}";
  }

第二 - 你可以在调用方法registerClientScript之前重新改变它:

public function registerClientScript(){
    $this->afterAjaxUpdate = "function(id,data){$('select').selectmenu()}";
    parent::registerClientScript();
  }

答案 1 :(得分:0)

经过更多研究后我发现,实际上无法设置默认的afterAjaxUpdate函数,该函数会自动在所有网格视图上触发。

但是有两种可能性,可以使用:

  1. 请参阅CreatoR的答案 - 在扩展的GridView对象中设置默认事件。只要没有人在特定网格中设置afterAjaxUpdate,就可以正常工作。

  2. 你可以通过添加一个新的option = function来改变(但这不是一个真正好的“扩展”方式) jquery.yiigridview.js 文件到这个特定需求例如'*** afterAjaxUpdateDefault * '**,并在调用' afterAjaxUpdate '之前或之后放置它。