Domanda

Sto cercando di creare una pagina web con la forma che una volta che il cambiamento utente qualsiasi campo, la convalida e l'aggiornamento commettono subito piuttosto che lasciare all'utente di cliccare sul pulsante di invio. Sto usando Knockout.js e la mappatura plugin. So che posso raggiungere questo obiettivo con la creazione di un campo calcolato per ogni campi originali, ma questo tipo di lavoro è tedius e muto, c'è buona pratica per creare un ascoltatore generale per l'ascolto su eventuali modifiche di tutti i campi e aggiornamento backend rispettivamente?

È stato utile?

Soluzione

Per abbonarsi a ogni cambiamento è possibile utilizzare il metodo ko.toJS (). In realtà permette di camminare attraverso oggetto grafico e osservabili Separa. Come il vostro probabilmente sanno quando si utilizza ko.computed si abbona a tutte le letture dei campi osservabili e rivalutare su ogni cambiamento. Quindi, se si utilizza il codice in questo modo:

ko.computed(function() {
   ko.toJS(viewModel);
   // update data on server
});

Inoltre si dovrebbe prestare attenzione che questo pezzo di codice aggiornerà i dati sul server di destra dopo l'inizializzazione. Si potrebbe facilmente essere evitato. Si prega di checkout questo esempio: http://jsfiddle.net/UAxXa/embedded/result/

Anche io credo che si potrebbe desiderare di inviare i dati modificati solo al server. Si potrebbe incorporare ko.editbales plug-in ( https://github.com/romanych/ko.editables ) e un po 'KO sotto conoscenze -Cappuccio. Si prega di checkout questo esempio: http://jsfiddle.net/romanych/RKn5k/

spero che potrebbe aiutare.

Altri suggerimenti

Hai avuto diverse opzioni, ma se si vuole un unico ascoltatore, un buon modo è quello di utilizzare lo stesso codice che ho usato per creare un cambiamento tracker. Si ascolta solo per i cambiamenti osservabili. I suoi circa 19 righe di codice. È possibile prendere questo e invece di usarlo per il rilevamento delle modifiche, solo filo in un metodo che consente di salvare le modifiche quando si verificano.

Per Imposta il rilevamento delle modifiche, aggiungere questa proprietà tracker per il vostro modello di vista:

viewModel.tracker = new ChangeTracker(viewModel); 

Agganciare questi in immagine per determinare quando si verificano modifiche:

viewModel.tracker().somethingHasChanged(); 

Hook questo nel modello vista quando si desidera ripristinare lo stato nelle funzioni (es: caricare, salvare):

viewModel.tracker().markCurrentStateAsClean; 

In alternativa, è possibile passare il proprio hashFunction per il monitoraggio dello stato, anche.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top