2012-03-08 11 views
5

Mam problemy dotyczące paginacji i formularza Ajax.Yii Widok CList -> pagination i AjaxLink/ajaxButton

Oto mój kod Controller:

$dataProvider = new CActiveDataProvider('User', array(
     'pagination'=>array(
       'pageSize'=>10, 
     ), 
)); 

$this->render('users',array(
    'dataProvider'=>$dataProvider, 
)); 

Do widzenia -> użytkownicy:

$this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$dataProvider, 
    'itemView'=>'_user', 

);

Dla czynią _users:

echo CHtml::ajaxLink($text, $this->createUrl('admin/deleteuser',array('id'=>$data->iduser)), array('success'=>"js:function(html){ alert('remove') }"), array('confirm'=>_t('Are you sure you want to delete this user?'), 'class'=>'delete-icon','id'=>'x'.$viewid)); 

jeśli mam 15 wierszy w bazie danych będzie tylko pokazać 10 i wygeneruje paginacji (ajaxUpdate = true) dla kolejnych 5. pierwszych 10 wierszy nie ma problemu z the ajaxLink, ponieważ generowany był clientcript, ale problemem jest to, kiedy przechodzę do następnej strony, ajaxLink nie działa, ponieważ nie jest generowany przez paginację.

jakiś pomysł? dzięki

+2

musisz ** wytłumaczyć ** co jest nie tak, zamiast tylko umieścić kod i oczekiwać odpowiedzi –

+0

gdzie jest opis tego, z czym stoisz? –

+1

Przepraszam, pomyślałem, że już postawiłem problem .. Przepraszam ponownie – butching

Odpowiedz

0

Nie jestem do końca pewien, ale biorąc pod uwagę przeszłe doświadczenia, myślę, że problem tkwi w samym widżecie listy.

Jeśli właścicielem widgetu jest kontroler, korzysta z renderPartial w celu renderowania widoku elementu. Renderpartial ma, jak możesz, ale nie musi, parametr "processOutput", który musi być ustawiony na PRAWDA dla większości magii AJAX (domyślnie FALSE).

Być może więc możesz spróbować wyprowadzić klasę listview i dodać tam kopię "renderItems()". Tam musiałbyś go zmienić, aby wywoływał metodę renderPartial z poprawnymi parametrami.

+0

kiedy klikam na następną stronę i ponieważ jest to ajax, zobaczyłem wynik w konsoli (firebug) i zobaczyłem, że został wygenerowany jscode ajaxLink, ale wciąż nie działa on dokument nadrzędny. – butching

+0

Większość rzeczy z linkami do linków wymaga jakiegoś kodu "na dokumencie", aby powiązać to wydarzenie, to znaczy, że nie jest ono dodawane do zwracanego wyniku za pomocą metody processOutput == FALSE. – Blizz

1

Alternatywna metoda, sprawdź to post in the yii forum. Więc twój kod będzie tak:

echo CHtml::link($text, 
    $this->createUrl('admin/deleteuser',array('id'=>$data->iduser)), 
    array(// for htmlOptions 
     'onclick'=>' {'.CHtml::ajax(array(
      'beforeSend'=>'js:function(){if(confirm("Are you sure you want to delete?"))return true;else return false;}', 
      'success'=>"js:function(html){ alert('removed'); }")). 
     'return false;}',// returning false prevents the default navigation to another url on a new page 
    'class'=>'delete-icon', 
    'id'=>'x'.$viewid) 
); 

Twój potwierdzić zostanie przeniesiona do jQuery za ajax funkcyjnego beforeSend zwrotnego. Jeśli zwrócimy false z beforeSend, wywołanie ajax nie występuje.

Kolejna propozycja, należy użyć post zmiennych zamiast get, a także czy można przesunąć ajax wezwanie do function w widoku indeksu, a tylko to wywołań funkcji z onclick imprezy przez wszystkie linki.

Mam nadzieję, że to pomoże.

+0

Tak, po prostu to przeczytałem i myślę, że nie mam innych opcji, więc stworzyłem coś z tego pomysłu .. po prostu umieść kody na AfterAjaxUpdate – butching

+0

ok..to inny sposób to zrobić –

0

W Clistview widget, dodałem afterAjaxUpdate

$jsfunction = <<< EOS 
js:function(){ 
    $('.delete-icon').live('click',function(){ 
     if(confirm('Are you sure you want to delete?')) 
     { 
     deleteUrl = $(this).attr('data-href'); 
     jQuery.ajax({'success':function(html){ },'url':deleteUrl,'cache':false}); 
     return false;  
     } 
     else 
     return false; 
    }); 
    } 
EOS; 

$this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$dataProvider, 
    'id'=>'subscriptionDiv', 
    'itemView'=>'_subscription', 
    'afterAjaxUpdate'=>$jsfunction, 
    'viewData'=>array('is_user'=>$is_user,'all'=>$all), 
    'htmlOptions'=>($dataProvider->getData()) ? array('class'=>'table') : array('class'=>'table center'), 
) 
); 

aw _user tylko dodaje data-href atrybutu

<?php echo CHtml::ajaxLink($text, $this->createUrl('admin/deletesubscription',array('id'=>$data->idsubscription)), 
      array('success'=>"js:function(html){ $('#tr{$viewid}').remove(); }"), 
      array('confirm'=>_t('Are you sure you want to unsubscribe?'), 
       'class'=>'delete-icon', 
       'id'=>'x'.$viewid, 
       'data-href'=>$this->createUrl('admin/deletesubscription',array('id'=>$data->idsubscription))     
       )); ?> 
0

spróbować

$this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$dataProvider, 
    'itemView'=>'_user', 
    'enablePagination' => true, 
); 

jeśli to nie rozwiąże , spróbuj podać całkowitą liczbę rekordów w opcjach dostawcy danych jako -

Powiązane problemy