1

ファイルの場所: yiiroot/framework/widjets/assets/gridview/jquery.yiigridview.js 要件で使用できるように、このファイルの 1 行を変更する必要があります。

//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 のoffmethodを使用することです。

jquery.yiigridview.jsにoff既に追加されているイベント ハンドラーを削除し、を使用して新しいハンドラーを追加できます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以下に示すように、変更したファイル フォルダーへのパスに設定します。

<?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 に答える