Was ist der beste Weg, um Dienste in knockout.js zu verwalten?Beste Möglichkeit, Dienste in Knockout.js zu verwalten?
Antwort
Der einfachste Weg ist die ajax()
Methode von jQuery.
Was wenn, haben Sie zwei Möglichkeiten:
ein Abonnement für einen beobachtbaren hinzufügen, deren Wert Sie speichern möchten. Zum Beispiel
var viewModel = function() { var self = this; self.name = ko.observable(""); self.name.subscribe(function(latestValue) { // This subscription will be triggered each time // the 'name' observable is updated. // The latest value of the observable is passed // here as a parameter. $.ajax({ // see http://api.jquery.com/jquery.ajax/ for details }); }); }
erstellen
save
Funktion, dann ist diese von dervar viewModel = function() { var self = this; self.name = ko.observable(""); self.save = function() { // unlike the first example, you would typically // POST more data in this AJAX request $.ajax({ // see http://api.jquery.com/jquery.ajax/ for details }); }; }
DOM/Ansicht aufrufen und dann in Ihrer DOM/Ansicht
<input type="button" value="Save" data-bind="click: save" />
Wenn Mit dem zweiten Beispiel finden Sie es wahrscheinlich am einfachsten, Daten als JSON zu senden, und in einem solchen Fall würden Sie wahrscheinlich erwarten, ko.toJSON
oder sogar JSON.stringify
zu verwenden. Ich würde jedoch empfehlen, dass Sie Ihre eigene toJSON
-Funktion in Ihrem Ansichtsmodell definieren.
Der Grund für die Annahme, dass Sie Ihre eigene toJSON
Funktion definieren ist, dass Ihre Ansicht-Modell Mitglieder haben, die Sie entweder gar nicht oder nicht Notwendigkeit wollen zurück an den Server zu senden (eine Auswahlliste beispielsweise von Ländern oder berechneten Observablen). Wenn Sie ko.toJSON
anrufen, wird alles serialisiert; Wenn Sie eine eigene Funktion definieren, können Sie genau steuern, welche Daten serialisiert werden.
Darüber hinaus sieht JSON.stringify
(die Knockout intern aufruft) auf Ihre Objekte für eine toJSON
-Funktion. Falls vorhanden, wird diese Funktion verwendet, ansonsten wird alles serialisiert.
Ein wichtiger Punkt hier ist, dass Ihre toJSON
Funktion ein Objekt, das serialisiert werden soll, nicht die serialisierte JSON selbst zurückgeben. [Documentation]
So werden wir beispielsweise 2 (von oben) ändern:
var viewModel = function() { var self = this; self.name = ko.observable(""); self.save = function() { // unlike the first example, you would typically // POST more data in this AJAX request $.ajax({ // see http://api.jquery.com/jquery.ajax/ for details }); }; self.toJSON = function() { return { name: ko.unwrap(self.name), ... }; }; }
Ich glaube, Sie brauchen in Ihrer Frage ein _little Bit_ präziser sein. Was genau willst du erreichen? – awj
Wie kann die WebAPI mit Knockout.js auf derselben Seite verwendet werden? Kannst du das beste Beispiel teilen? –