Yii2 aggiornamento ListView

Buongiorno

Ho implementato su Yii 1.1 un form di ricerca che mostra i risultati parziali all’utente.

Per la creazione di questa funzionalità ho banalmente aggiunto questo codice js.


	

$('#search-form').keyup(function(){

	$.fn.yiiListView.update(

	'result-grid',

	{data: $(this).serialize()});

});



Sto effettuando il porting dell’applicazione ad yii2.

Con la nuova versione del framework è necessario effettuare questo tipo di operazioni con pjax

Dunque ho seguito questa wiki, ed ho effettuato le seguenti modifiche al codice:

View:


<?php \yii\widgets\Pjax::begin(); ?>

<?= ListView::widget([

		'id'=>'result-grid',

		'dataProvider'=>$model->result,

		[...]

		

	]);	

?>

<?php \yii\widgets\Pjax::end(); ?>

Javascript:




$('#search-form').keyup(function(){

	$.pjax.reload({container:'#result-grid', data:$(this).serialize()})

});



L’aggiornamento della ListView viene effettuato correttamente, ma la scrittura non è fluida e ogni 2-3 caratteri digitati si perde il focus del form di ricerca.

Ho provato a giocare con i vari parametri async, ma il risultato non sembra cambiare.

Qualcuno ha qualche consiglio da darmi su come implementare correttamente questa funzionalità?

Did you get that working?

I have the same problem/task to convert a search field from yii 1.1 to 2.0

Do you really need "data:$(this).serialize()" in pjax reload?


 $.pjax.reload({container:'#result-grid', data:$(this).serialize()})

I always use reload without it.

Sorry, I don´t speak italian, so I have to write in english…

La strada che hai scelto è quella condivisa da diversi sviluppatori ma a me non convince molto, pjax è un plugin per usare pushState nelle chiamate ajax, a te mi sembra che non servono quindi, secondo me, ti conviene implementarti questa cosa scrivendo il codice Javascript che ti serve, o meglio un widget.

Se invece vuoi mantenere pjax cerca di capire quale evento fa perdere il focus al campo e quali sono gli eventi che ti rallentano la scrittura, per farlo ti consiglio di debuggare il codice con Firebug per Firefox o un IDE decente (io uso netbeans con il connector per chrome).