2012-03-03 84 views
16

我這一發現一個奇怪的地方是在一個小的損失,但如果我不能」做這樣的:你如何增加knockout.js的可觀察性?

koObserv(koObserv() + 1); 

,而不是提供了一種方法,我是被迫做:

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

這看起來真的很笨拙..有沒有另一種方法,我錯過了?

+2

你可以做'koObserv(koObserv()+ 1);'。你可以分享你的代碼不工作?這可能會導致問題的唯一地方,就是它是否在計算的可觀察值中,從而導致遞歸重新評估。 – 2012-03-03 19:05:15

回答

3

我建議你,如果你使用大量的增量,創建一些幫助函數來做增量並將其傳遞給可觀測值的引用。你最終得到更可讀的代碼。

JS

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

HTML

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

JSFiddle example

+1

您也可以將函數添加到['ko.observable.fn'](http://knockoutjs.com/documentation/fn.html) – 2015-07-20 14:29:21

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