2012-03-03 78 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