2013-03-22 7 views
8

Quando esegui il binding a una griglia dell'interfaccia utente Kendo con MVVM, il database viene generato una volta e tutto funziona correttamente. Se è necessario aggiornare tali dati dopo il fatto, ogni volta che si modifica un pezzo di dati su qualsiasi viewmodel (o child viewmodel), l'intera griglia riscrive i dati. Quindi, se hai una cella nella griglia associata a un modello e devi modificare 2 o 3 proprietà sul viewmodel da una fonte esterna di ajax, Databound sparerà 2 o 3 volte per ogni modello che viene modificato, causando la l'intera area visibile da ricollegare. Come possiamo aggiornare molti dati in una sola volta e avere un fuoco di dati una sola volta?Come evitare che l'interfaccia utente di Kendo Grid si ribelli più volte durante l'aggiornamento di ViewModels

risposta

9

In che modo riordina esattamente la griglia? In pratica se si modificano alcuni dei modelli di questo tipo:

dataItem.set('SomeField','new value'); 
dataItem.set('someOtherField','other value'); 

In questo modo la rete sarà infatti legato due volte a causa del MVVM. L'evento change viene attivato ogni volta che si chiama set.

Tuttavia, se si aggiornano i valori di questo tipo:

dataItem.SomeField='new value'; 
dataItem.someOtherField= 'other value'; 

The Grid solito reagire al cambiamento e di solito associare nuovamente ri-leggere i valori dai modelli è possibile forzare la griglia di farlo attraverso il refresh Metodo.

$('#gridName').data().kendoGrid.refresh() 
+0

Questo approccio funziona bene purché tu sappia a quale elemento (i) sei legato. Se i dati che stai aggiornando sono legati a più di una cosa e sono stati aggiornati in una sorta di libreria in cui non ti interessa degli elementi dello schermo, questo potrebbe causare alcuni problemi. Se chiamate set() sulla proprietà dell'ultimo oggetto, non vi interesserà ciò che vi è legato. Otterranno tutti l'aggiornamento. –

1

Non sono sicuro se c'è un modo per dire temporaneamente alla griglia di interrompere l'ascolto degli eventi e quindi alla fine, risincronizzare una volta. Se c'è, per favore dai la risposta qui! Altrimenti, quello che ho fatto è che non ho passato. Set() per ogni oggetto. Invece, ho aggiornato i dati per tutte le righe impostando i dati direttamente sulla proprietà. Poi, quando sono arrivato all'ultima riga che stavo aggiornando, ho chiamato .set() sull'ultima proprietà che doveva essere aggiornata. Ciò causerà l'attivazione di databound una sola volta e l'intera griglia si aggiornerà con tutti i dati che sono stati modificati. Se non lo fai in questo modo, più righe vengono visualizzate sulla pagina, più tempo è necessario per l'elaborazione. (Potrebbero volerci 20+ secondi prima che l'utente possa fare di nuovo qualcosa.)

+0

Un altro modo è quello di aggiungere semplicemente alcune proprietà fasullo all'ultima voce e cambiare il suo valore alla fine. Causerà lo stesso effetto. –

1

Sembra che l'evento dataBinding sia il punto in cui è possibile impedire una rebind sulla griglia.

Telerik Online Docs

Problemi correlati