Problema Con Aggiornamento Clistwiew

Salve a tutti,

ho un problema con una CListView.

Ho un elenco di prodotti dove per ogni elemento della lista ho un pulsante che apre un dialog con un form di un altro model (per aggiungere delle vendite relative a quel prodotto). per far questo sto utilizzando formdialog, e funziona tutto perfettamente. il problema nasce quando aggiorno la lista con $.fn.yiiListView.update("idDellaLista").

La CListView viene aggiornata ma il Dialog e altri javascript (ho un effetto popover di bootstrap) non funzionano più e non capisco dove sia l’errore.

Ho altre view simili dove però utilizzo CGridView e lì funziona tutto senza problemi.

ho modificato la CGridView in modo da avere un pulsante per ogni riga, ma anche qui il comportamento è lo stesso della CListView.

Probabilmente è perchè gli script che avviano il Dialog o il popover sono all’interno della lista/tabella stessa. ho provato a richiamarli con ‘afterAjaxUpdate’ e in effetti funziona, il problema è che dovrei farlo per tutti i singoli pulsanti.

A me il dialog funziona correttamente anche dopo un refresh.

Il widget dialog dovresti usarlo solo una volta per tutta la pagina, e non va mai aggiornato.

Mettilo dopo la gridView e usa un selettore jquery in grado di catturare tutti i bottoni che ti servono (per classe, non per id).

Lo script viene collegato al link con una on, significa che funziona anche sui link ‘nuovi’ e non solo su quelli preesistenti.

Ps: se ti piace l’estensione dammi un + sulla pagina!

si, il problema c’era quando inserivo il widget direttamente nella _view della CListView e non al di fuori. in pratica avevo un widget per ogni link e per ogni link avevo la classe


"create".$data->id

che mi selezionava il link corretto. ma non funziona al refresh.

avendo il widget fuori dalla lista/tabella non c’è questo problema, ma dovrei trovare il modo di selezionare i pulsanti che mi servono.

cmq per ora ho lasciato perdere, il fatto di aggiornare direttamente dalla lista o dalla tabella era solo una comodità in più ma non era essenziale.

però ho un altro problema, in formDialog.js c’è


dialog.dialog('close').detach();

che elimina il dialog all’invio del form. se invece chiudo il dialog senza inviare il form e poi lo riapro, il dialog precedente viene solo nascosto e ne viene creato un altro.

Non dava problemi e non l’avevo notato, ora però nel form ho un campo con un CJuiDatePicker che giustamente non si apre più (risultano altri campi con lo stesso ID).

si può eliminare il dialog anche alla chiusura? (nel CJuiDialog c’è l’opzione ‘close’, ma qui non so come inserirla).

già fatto :)

ho modificato il file formDialog.js in modo da poter inserire l’evento alla chiusura del Dialog. già che c’ero ho provato ad inserire anche altre opzioni come l’altezza e il titolo (in modo da averli diversi in base al contesto).

ho modificato


dialog.dialog();

in


dialog.dialog({

 title: options['title'], 

 height: options['height'],

 close: function() { 

  dialog.parent().detach();

 }

});