在Yii Grid View中覆盖私有JS方法

时间:2013-07-09 13:43:10

标签: javascript jquery yii

我想在YiiGridView的{​​{1}}插件中扩展一个函数,将数据添加到插件发出的ajax调用中。

插件文件的完整源代码可在以下位置查看:https://code.google.com/p/yii/source/browse/trunk/framework/zii/widgets/assets/gridview/jquery.yiigridview.js

以下是我遇到的解决方案:

解决方案

  1. 目前,我正在使用ScriptMap,如下所示: http://www.yiiframework.com/forum/index.php/topic/31530-override-jqueryyiigridviewjs/

  2. 我也可以选择使用ajaxSend全局事件将自己的数据添加到每个发送的请求中:http://api.jquery.com/ajaxSend/

  3. 表示可以通过覆盖yii\framework\zii\widgets\assets\gridview\jquery.yiigridview.js函数实现此类功能的其他方法不适用,因为从$.fn.yiiGridView.update开始不推荐使用此类方法。

  4. 问题

    我想要实现的是改变:

    Yii 1.1.9

    为:

    $.ajax(options);
    

    无需采用方法1,2或3.如果无法做到这一点,我想确认一下。

    插件文件中的第270行:https://code.google.com/p/yii/source/browse/trunk/framework/zii/widgets/assets/gridview/jquery.yiigridview.js#270

2 个答案:

答案 0 :(得分:1)

恕我直言,可接受的选项是1或3

1:
+使用核心功能
+只有一个脚本请求
- 你可以打破一些东西 3:
+安全(没有破坏任何东西)
- 附加要求
- 需要连接每个文件

我会选择1号选项

答案 1 :(得分:0)

此处添加此内容仅供日后参考。

从问题中可以明显看出,我试图覆盖ajax调用中的data参数。

我需要这样做才能将自定义数据附加到data对象,在这种情况下,过滤到'filterSelector' => 'input[name^=filter]',对象。

有更好的方法来实现这一目标。您可以使用网格配置选项$this->widget('bootstrap.widgets.TbGridView', array( 'type' => 'striped', 'id' => 'grid-id', 'selectableRows' => 0, 'dataProvider' => $model->search(), 'template' => "{items}\n{pager}", 'filterSelector' => 'input[name^=filter]' )); 来选择自定义过滤器,而不是尝试入侵代码并更改数据对象。

生成的配置数组将是:

filterSelector

{{1}}选项会自动将匹配字段中的任何数据附加到每个ajax调用,从而无需覆盖。