0

我想在YiiGridView插件中扩展一个函数,yii\framework\zii\widgets\assets\gridview\jquery.yiigridview.js以将数据添加到插件进行的 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. 表明可以通过覆盖$.fn.yiiGridView.update函数来实现此类功能的其他方法不适用,因为Yii 1.1.9此类方法已被弃用。

问题

我想要实现的是改变:

$.ajax(options);

至:

options = $.extend({}, options, {data: myCustomData});
$.ajax(options);

无需诉诸方法 1、2 或 3。如果这不可能,我想确认一下。

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

4

2 回答 2

1

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

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

我会选择选项 1

于 2013-07-09T14:25:48.413 回答
0

在此处添加此内容仅供将来参考。

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

我需要这样做来附加我的自定义数据,在这种情况下,过滤器到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选项会自动将匹配字段中的任何数据附加到每个 ajax 调用,从而无需覆盖。

于 2013-07-23T12:58:16.137 回答