【问题标题】:Yii CGridView - set default afterAjaxUpdate callbackYii CGridView - 设置默认 afterAjaxUpdate 回调
【发布时间】:2013-11-04 15:12:36
【问题描述】:

是否有人知道在 CGridView 中设置默认函数的可能性,该函数将在每次 AJAX 更新后在页面上的所有网格上运行? 我在很多页面上都使用了 CGridView,我不想为每个网格单独指定这个函数。 我需要这个,因为我使用jQuery selectmenu 作为过滤器下拉菜单,并且在 AJAX 重新加载后,它们需要再次初始化。

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

【问题讨论】:

    标签: php ajax yii cgridview select-menu


    【解决方案1】:

    查看值http://www.yiiframework.com/doc/api/1.1/CGridView#afterAjaxUpdate-detail的格式

    收到成功的 AJAX 响应后将调用的 javascript 函数。函数签名是function(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()}";
    }
    

    更新:

    我查看了小部件的源代码以及仅在方法registerClientScript中使用的属性afterAjaxUpdate。这就是为什么我提出另一种解决方案。首先 - 您可以在继承类的 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();
      }
    

    【讨论】:

    • 这与格式无关,我会更新我的问题......这不是问题。问题是每个可能的 GridView 都需要这个,作为默认设置
    • 嗯,这将是一个好主意,但是如果我需要在一个特定的网格中添加更多功能,那么我会再次失去这个默认功能。我需要这样的默认值,它不能被覆盖
    • 你的两个建议仍然做同样的事情。无论您是在属性中设置它,还是在 init 中,甚至在 registerClientScript 中设置它都没有关系。实际上,此解决方案将删除在使用 GridView 的视图中通常可能分配给的任何其他代码
    【解决方案2】:

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

    然而,有两种可能,一种可以使用:

    1. 查看来自CreatoR 的答案 - 在扩展的 GridView 对象中设置默认事件。只要没有人在特定网格中手动设置 afterAjaxUpdate,这将起作用。

    2. 您可以更改(但这不是一个真正好的“扩展”方式)jquery.yiigridview.js 文件以满足特定需求,方法是添加一个新的 option=function, sth像 '***afterAjaxUpdateDefault*'**,并将其放在调用 'afterAjaxUpdate' 之前或之后。

    【讨论】:

      猜你喜欢
      • 2013-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多