Frage

Ich versuche, eine Webseite mit Form zu erstellen, bei der Benutzer nach dem Ändern eines Feldes ein sofortiges Validierungs- und Aktualisierungs -Commit sofort geändert werden, anstatt den Benutzer auf die Schaltfläche Senden zu klicken. Ich benutze Knockout.js und Mapping -Plugin. Ich weiß, dass ich dies erreichen kann, indem ich ein berechnetes Feld für jede ursprüngliche Felder erstelle, aber diese Art von Arbeit ist Tedius und dumm. Gibt es eine gute Praxis, um einen allgemeinen Hörer zu erstellen, um Änderungen in allen Bereichen zu hören und Backend zu aktualisieren?

War es hilfreich?

Lösung

Um eine Änderung zu abonnieren, können Sie die Ko.tojs () -Methode verwenden. Eigentlich ermöglicht es, Objektdiagramme zu durchgehen und Observables auszupacken. Wie Sie wahrscheinlich wissen, wenn Sie Ko.computiert verwenden, wird es allen Lesungen von Observables-Feldern abonniert und bei jeder Änderung neu bewertet. Wenn Sie also einen solchen Code verwenden:

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

Außerdem sollten Sie darauf achten, dass dieses Code direkt nach der Initialisierung Daten auf dem Server aktualisiert. Es könnte leicht vermieden werden. Bitte überprüfen Sie dieses Beispiel: http://jsfiddle.net/uaxxa/embeded/result/

Ich denke auch, dass Sie möglicherweise nur geänderte Daten an den Server senden möchten. Sie könnten das Ko.editbales -Plugin (ein Plugin ( https://github.com/romanych/ko.editables ) und einige KO-Unterhutkenntnisse. Bitte überprüfen Sie dieses Beispiel: http://jsfiddle.net/romanych/rkn5k/

Ich hoffe, es könnte Ihnen helfen.

Andere Tipps

Sie haben mehrere Optionen, aber wenn Sie einen einzelnen Hörer wünschen, können Sie denselben Code verwenden, den ich verwendet habe, um einen Change Tracker zu erstellen. Es hört einfach die beobachtbaren Änderungen an. Es ist ungefähr 19 Codezeilen. Sie können dies greifen und anstatt es für die Änderung der Verfolgung zu verwenden, verdrahten Sie einfach eine Methode, die die Änderungen spart, wenn sie auftreten.

Fügen Sie diese Tracker -Eigenschaft Ihrem Ansichtsmodell hinzu, um das Verfolgen der Verfolgung zu ändern:

viewModel.tracker = new ChangeTracker(viewModel); 

Haken Sie diese in Ihre Ansicht, um festzustellen, wann Änderungen auftreten:

viewModel.tracker().somethingHasChanged(); 

Schalten Sie dies in Ihr Ansichtsmodell ein, wenn Sie den Zustand in Funktionen zurücksetzen möchten (Beispiel: Last, Speichern):

viewModel.tracker().markCurrentStateAsClean; 

Optional können Sie auch Ihre eigene Hashfunktion für die staatliche Verfolgung bestehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top