2012-08-14 3 views
1

파일에 ajaxLink()을 사용하는 CListView이 있습니다.Yii ajaxLink()는 한 번만 작동합니다.

보기 (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)); ?> 

컨트롤러는 기본적으로 GII 생성됩니다 단지 기본 actionIndex()입니다.

여기에 문제가 있습니다. 페이지로드 후 처음으로 Delete 링크를 클릭하면 예상대로 작동합니다. 그 후 Delete을 클릭해도 아무런 변화가 없습니다. (이리스트 뷰를 새로 있지만 변경되지 않습니다.)

나는 문제가 YII 자바 스크립트 내 링크에 click() 이벤트를 결합하는 방법에있다 확신 해요,하지만 난 그것을 해결하는 방법을 모른다. live=true 옵션을 사용하여 다른 사람들이 제안한대로 시도했지만 아무 것도 수행하지 않습니다.

누구든지 페이지를 다시로드하지 않고도 내 삭제 링크가 여러 번 작동하도록이 문제를 해결하는 방법을 알고 있습니까?

답변

1

어, 바보 같은 수정. 나는 문제 해결 단계 이전에 실수로 컨트롤러에 CHtml::$liveEvents = false을 남겨 두었다는 것을 깨달았습니다.

해결책은 CHtml::$liveEvents = true (기본값)으로두고 모든 링크에 고유 ID가 있는지 확인해야합니다.

2

새로 고침 한 항목 목록의 삭제 링크가 일부입니까? 이 경우 새 링크가 만들어지면 스크립트는 새 링크로 다시 등록되지 않습니다.

두 가지 옵션 :

1) 반드시 귀하의 링크가 갱신되지 않는 확인하고 페이지

2) YII의 ajaxLink를 사용하는 대신 사용자 정의 jQuery를 처리기 쓰기의 영구적 인 측면이다. .on과 위임 된 이벤트를 사용해야합니다. 형태의 뭔가 :

$("#parentContainer").on("click", ".deleteLinkClass', updateItemList) 
parentContainer 페이지에 영구적 인 아이템이다

하고 deleteLinkClass 당신이 사용하고있는 삭제 링크에 할당해야합니다 클래스 될 것입니다.

+0

좋은 제안이며 사용자 지정 처리기를 작성하는 데 도움이됩니다. 다행히도, 나는 코드에서 어리석은 실수를 고쳤다. 어쨌든 당신을 뽑았습니다. – penco

관련 문제