2016-07-10 13 views
0
zurückgesetzt werden

Ich habe mehrere beobachtbare Eigenschaften. Ich möchte einzelne beobachtbare Eigenschaften nicht zurücksetzen. Hier ist ein Beispielcode, den ich habe.Wie alle Observables auf den Standardwert

function viewData() { 
    var self = this; 
    self.Id = ko.observable(""); 
    self.Name = ko.observable(""); 
    self.Display = ko.observable(""); 
    self.Date = ko.observable(""); 

    self.Reset = function { 
      //Reset all observable variables here 
    } 
} 

Dies ist eine kurze Liste der echten Sache. Ich habe ungefähr 30 beobachtbare Eigenschaften.

Antwort

1

zurücksetzen müssen Sie nur „clear“ Observablen wollen verwenden, die ko.isWriteableObservable(...) Dienstprogramm Methode:

function viewData() { 
 
    var self = this; 
 
    self.Id = ko.observable("A"); 
 
    self.Name = ko.observable("B"); 
 
    self.Display = ko.observable("C"); 
 
    self.Date = ko.observable("D"); 
 

 
    self.Reset = function() { 
 
    for (var key in self) { 
 
     if (self.hasOwnProperty(key) && ko.isWriteableObservable(self[key])) { 
 
     self[key](null); 
 
     } 
 
    } 
 
    }; 
 
} 
 

 
ko.applyBindings(new viewData());
pre { font: 11px consolas; padding: 5px; background: #fafafa; border: 1px solid #ddd; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.0/knockout-min.js"></script> 
 

 
<input data-bind="textInput: Id"><br> 
 
<input data-bind="textInput: Name"><br> 
 
<input data-bind="textInput: Display"><br> 
 
<input data-bind="textInput: Date"><br> 
 
<button data-bind="click: Reset">Reset</button> 
 
<hr>Debug info: <pre data-bind="text: ko.toJSON($root, null, 2)"></pre>

Wenn Sie wirklich wollen, zu se t Standard Werte, müssen Sie dieses Muster manuell implementieren. Für den Anwendungsfall gibt Ihre Antwort, the answer by @Nora wird gut funktionieren. Für komplexere Szenarien müssen Sie zu „definieren“ Ihre Standardwerte irgendwie:

function viewData() { 
 
    var self = this; 
 
    
 
    var defaults = { 
 
    Id: 0, 
 
    Name: "", 
 
    Display: "stub value", 
 
    Date: new Date() 
 
    }; 
 
    
 
    self.Id = ko.observable(); 
 
    self.Name = ko.observable(); 
 
    self.Display = ko.observable(); 
 
    self.Date = ko.observable(); 
 

 
    self.Reset = function() { 
 
    for (var key in self) { 
 
     if (self.hasOwnProperty(key) && ko.isWriteableObservable(self[key])) { 
 
     self[key](defaults[key]); 
 
     } 
 
    } 
 
    }; 
 
    
 
    self.Reset(); 
 
} 
 

 
ko.applyBindings(new viewData());
pre { font: 11px consolas; padding: 5px; background: #fafafa; border: 1px solid #ddd; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.0/knockout-min.js"></script> 
 

 
<input data-bind="textInput: Id"><br> 
 
<input data-bind="textInput: Name"><br> 
 
<input data-bind="textInput: Display"><br> 
 
<input data-bind="textInput: Date"><br> 
 
<button data-bind="click: Reset">Reset</button> 
 
<hr>Debug info: <pre data-bind="text: ko.toJSON($root, null, 2)"></pre>

1

nicht sicher, ob dies ist, was Sie brauchen, aber Sie können die Einstellung Standardwerte in eine Funktion extrahieren und es verwenden, wenn Sie alle Werte

function viewData() { 
    setDefaultValues() 

    self.Reset = function { 
     setDefaultValues() 
    } 
} 

var setDefaultValues = function() { 
    var self = this; 
    self.Id = ko.observable(""); 
    self.Name = ko.observable(""); 
    self.Display = ko.observable(""); 
    self.Date = ko.observable(""); 
} 
Verwandte Themen