1

文件位置是:yiiroot/framework/widjets/assets/gridview/jquery.yiigridview.js 我需要在这个文件中更改一行,以便我可以在我的要求中使用它。

//original code line 79,80
                if (settings.ajaxUpdate.length > 0) {
                    $(document).on('click.yiiGridView', settings.updateSelector, function () {

//I need to change it to :

                if (settings.ajaxUpdate.length > 0) {
                    $(this).parent().on('click.yiiGridView', settings.updateSelector, function () {

在不需要更改源代码文件的情况下覆盖它的正确方法是什么?

4

2 回答 2

3

另一种方法是使用jQuery 的off方法

使用off你可以删除已经添加在jquery.yiigridview.js中的事件处理程序,然后使用添加一个新的处理程序on

像这样的东西(在具有网格视图的视图中):

<?php
Yii::app()->clientScript->registerScript('myownhandlers',
    "
        $(document).off('click.yiiGridView', $.fn.yiiGridView.settings['your-grid-id'].updateSelector); // this will remove the jquery.yiigridview.js handler

        // assign the new handler, instead of $(this) you have to use the id of the element you are interested in
        $('#the-id-you-are-interested-in').parent().on('click.yiiGridView', settings.updateSelector, function () {
        // your function's code, you'll have to write your function
        });
    ",
    CClientScript::POS_LOAD // this is important because the default is POS_READY, and the gridview is available only after load
);
?>

继续阅读on方法以更好地理解代码。

笔记:

注意事件命名空间 ieclick.yiiGridView是正确的,实际上在 yii 的版本中我没有命名空间,它只是click,所以在覆盖之前检查一下。

于 2012-05-12T09:36:56.097 回答
2

将文件夹的全部内容复制yiiroot/framework/zii/widgets/assets/gridview/到客户端可以访问的位置,例如your_web_app_dir/gridview并进行所需的修改。然后baseScriptUrl在gridview中添加属性并将其设置为您修改过的文件夹的路径,如下所示

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'model-grid',
    'baseScriptUrl'=>Yii::app()->baseUrl.DIRECTORY_SEPARATOR.'gridview',
    'dataProvider'=>$datatProvider,
    'columns'=>array(
     ....
     ....
     ),
    )); ?>
于 2012-05-06T18:11:39.997 回答