2013-02-28 25 views
6

क्या एक अवलोकन योग्य मूल्य के संशोधन को अस्वीकार/रद्द करने का कोई तरीका है? इस तरह:अवलोकन योग्य मान बदलें

observable.subscribe (function (newvalue) { 
    if (newvalue < 0) { 

     // cancel changing 
    } 
    else{ 
     // proceed with change 
    } 

}, this) 

उत्तर

8

संपादित करें:

मैं कुछ और मिला: लेखनीय अभिकलन observables।

function AppViewModel() { 
    this.field = ko.observable("initValue"); 
    this.computedField = ko.computed({ 
     read: function() { 
      return this.field(); 
     }, 
     write: function (value) { 
      if(value > 0) { 
       this.field(value); 
      } 
     }, 
     owner: this 
    }); 
} 

तो फिर आप गणना क्षेत्र के लिए बाध्य:

यहाँ एक उदाहरण है।

/

मैं कस्टम बाध्यकारी के साथ जाऊंगा। http://learn.knockoutjs.com/#/?tutorial=custombindings

या यहाँ प्रलेखन है::

यहां कस्टम बाइंडिंग के लिए ट्यूटोरियल है http://knockoutjs.com/documentation/custom-bindings.html

0

मदद करने के लिए लिखने के मूल्यों को अस्वीकार मैं निम्नलिखित प्रयोग किया है:

  • बनाएँ नमूदार छिपा हुआ जो मूल्य को स्टोर करता है।
  • छिपे हुए अवलोकन योग्य के आधार पर एक लिखने योग्य गणना योग्य अवलोकन योग्य लौटें।
  • जब गणना किए गए अवलोकन करने योग्य कुछ लिखा जाता है, तो इसे स्वीकार करने से पहले इसे सत्यापित करें।

मैं इस कोड के साथ नॉकआउट बढ़ाया:

ko.conditionedObservable = function (initialValue, condition) { 
    var obi = ko.observable(initialValue); 
    var computer = ko.computed({ 
     read: function() { return obi(); }, 
     write: function (newValue) { 
      //unwrap value - just to be sure 
      var v = ko.unwrap(newValue); 
      //check condition 
      if (condition(v)) { 
       //set it to the observable 
       obi(v); 
      } 
      else { 
       //reset the value 
       computer.notifySubscribers(); 
      } 
     } 
    }); 
    return computer; 
}; 

इस तरह वस्तु में यह प्रयोग करें:

field = ko.conditionedObservable<number>(null, (v) => parseInt(v) > 0); 

अधिक विवरण के लिए मेरी Conditioning Knockout Observables: reject values ब्लॉग की जाँच करें।

संबंधित मुद्दे