有人知道在CGridView中设置默认函数的可能性,它会在每次AJAX更新后在页面上的所有网格上运行吗? 我在许多页面上使用CGridView,我不想分别为每个网格指定这个函数。 我需要这个,因为我使用jQuery selectmenu作为我的过滤器下拉列表,并且在AJAX重新加载之后,它们需要再次被反复使用。
'afterAjaxUpdate' => "function(id,data){$('select').selectmenu()}";
答案 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函数,该函数会自动在所有网格视图上触发。
但是有两种可能性,可以使用:
请参阅CreatoR的答案 - 在扩展的GridView对象中设置默认事件。只要没有人在特定网格中设置afterAjaxUpdate,就可以正常工作。
你可以通过添加一个新的option = function来改变(但这不是一个真正好的“扩展”方式) jquery.yiigridview.js 文件到这个特定需求例如'*** afterAjaxUpdateDefault * '**,并在调用' afterAjaxUpdate '之前或之后放置它。