2012-03-03 7 views
16

मैं इस एक नुकसान का एक सा पर होना एक अजीब जगह खोजने हूँ, लेकिन 'अगर मैं नहीं कर सकते ऐसा करते हैं:आप knockout.js को देखने में कैसे वृद्धि करते हैं?

koObserv(koObserv() + 1); 

और एक विधि प्रदान नहीं की है, मैं करने को मजबूर:

koObserv = ko.observable(koObserv() + 1) 

यह वास्तव में बेकार लगता है .. क्या कोई अन्य तरीका है जिसे मैं याद कर रहा हूं? आप देख सकते हैं self.num(self.num() + 1); काम करता है

http://jsfiddle.net/jearles/LbPDK/

:

+2

आप 'koObserv (koObserv() + 1) कर सकते हैं;'। क्या आप अपना कोड साझा कर सकते हैं जहां यह काम नहीं कर रहा है? एकमात्र जगह जहां यह समस्याएं पैदा कर सकती है, यह है कि यदि यह एक गणना योग्य अवलोकन योग्य है जहां यह रिकर्सिव पुनः मूल्यांकन कर सकता है। –

उत्तर

27

यहाँ एक बेला कि incrementing दर्शाता है।

3

मैं आपको सलाह दूंगा कि यदि आप बहुत अधिक वृद्धि का उपयोग करते हैं, तो वृद्धि करने के लिए कुछ सहायक कार्य बनाएं और इसे अपने अवलोकन के संदर्भ को पास करें। आप अधिक पठनीय कोड के साथ समाप्त होता है।

जे एस:

var increment = function (observable) { 
    observable(observable() + 1); 
}; 

var MyViewModel = function() { 
    this.num1 = ko.observable(0); 

    this.incrementNum = function (observable) { 
     // passing the observable by reference to the helper function 
     increment(observable); 
    } 
} 

एचटीएमएल:

<button data-bind="click: incrementNum.bind($root, num1)"> 

JSFiddle example

+1

आप ['ko.observable.fn'] (http://knockoutjs.com/documentation/fn.html) में एक फ़ंक्शन भी जोड़ सकते हैं –

6

आप सार एक में इन तर्क का विस्तार कर सकता है नमूदार

ko.observable.fn.increment = function (value) { 
    this(this() + (value || 1)); 
}; 

var counter = ko.observable(0); 
console.log(counter()); // 0 

counter.increment(); 
console.log(counter()); // 1 

counter.increment(); 
console.log(counter()); // 2 

counter.increment(5); 
console.log(counter()); // 7 
संबंधित मुद्दे