2016-07-10 4 views
0

관찰 가능한 속성이 여러 개 있습니다. 나는 관찰 가능한 개별 속성을 재설정하고 싶지 않습니다. 여기에 내가 가진 몇 가지 예제 코드가있다.모든 관측 값을 기본값으로 재설정하는 방법

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

이것은 실제의 짧은 목록입니다. 나는 약 30 개의 관측 가능한 특성을 가지고있다.

답변

1

를 재설정해야 할 때마다 사용할 수 있는지 확실하지 의 ko.isWriteableObservable(...) 유틸리티 메소드를 사용 : 당신이 진정으로 원하는 경우

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>

을 자체 t 기본값 인 값을 사용하려면 해당 패턴을 수동으로 구현해야합니다. 귀하의 대답은, the answer by @Nora 잘 작동합니다 유스 케이스 들어. 더 복잡한 시나리오는 어떻게 든 기본적으로 "정의"해야 할 것 :

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

이 필요한 것입니다,하지만 당신은 함수로 설정 기본 값을 추출하고 당신은 그냥 "분명히 '관찰 가능한 원하는 경우 모든 값

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