2016-06-16 5 views

Antwort

1

Der einfachste Weg ist die ajax() Methode von jQuery.

Was wenn, haben Sie zwei Möglichkeiten:

  1. 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 
         }); 
        }); 
    } 
    
  2. erstellen save Funktion, dann ist diese von der

    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 
         }); 
        }; 
    } 
    

    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), 
      ... 
     }; 
    }; 
}