1

CListViewファイルで使用ajaxLink()する があります_view

ビュー (index.php)

<?php

Yii::app()->clientScript->registerScript('ajaxUpdate',
"
//javascript function to update the listview using ajax
function updateItemList(){
    $.fn.yiiListView.update('itemList');
    return false;
}

", CClientScript::POS_READY);

?>
<?php $this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$dataProvider,
    'itemView'=>'_view',
    'id'=>'itemList',

)); ?>

部分 (_view.php)

<?php echo CHtml::ajaxLink('Delete',array('libdbitems/delete','id'=>$data->id),
                array('type'=>'POST','success'=>'function(){updateItemList()}'),
                array('confirm'=>'Are you sure you want to delete this item?',
                    'id'=>'delete-'.$data->id));  ?>

コントローラーは基本的に、actionIndex()Gii で生成されるデフォルトにすぎません。

ここに問題がDeleteあります。ページの読み込み後に初めてリンクをクリックすると、期待どおりに動作します。その後、クリックしても何も起こりDeleteません。(ListView を更新しますが、変更は行われません。)

問題は、Yii がイベントを JavaScript のリンクにバインドする方法にあると確信しclick()ていますが、それを修正する方法がわかりません。他の人が提案したように、オプションを使用してみlive=trueましたが、何もしません。

ページをリロードしなくても削除リンクが複数回機能するように、この問題を修正する方法を知っている人はいますか?

4

2 に答える 2

2

あなたの削除リンクは更新されたアイテムリストの一部ですか? その場合、新しいリンクが作成されたときに、スクリプトは新しいリンクに再登録されません。

2 つのオプション:

1)リンクが更新されていないこと、およびページの永続的な側面であることを確認してください

2) Yii の ajaxLink を使用するのではなく、カスタム jQuery ハンドラーを作成します。.onおよび委任されたイベントを使用する必要があります。フォームの何か:

$("#parentContainer").on("click", ".deleteLinkClass', updateItemList)

parentContainerはページ上の永続的なアイテムであり、使用deleteLinkClassしている削除リンクに割り当てる必要があるクラスになります。

于 2012-08-14T16:15:23.767 に答える
1

ええ、ばかげた修正です。CHtml::$liveEvents = falseトラブルシューティング段階の初期の段階で、誤ってコントローラに を置いたままにしていたことに気付きました。

解決策は、そのままにしてCHtml::$liveEvents = true(デフォルト)、すべてのリンクに一意の ID があることを確認することです。

于 2012-08-14T21:22:44.170 に答える