Javascript 如何增加knockout.js可观测值?
我觉得这是一个奇怪的地方,有点不知所措,但如果我不能做到这一点:Javascript 如何增加knockout.js可观测值?,javascript,knockout.js,Javascript,Knockout.js,我觉得这是一个奇怪的地方,有点不知所措,但如果我不能做到这一点: koObserv(koObserv() + 1); 如果没有提供方法,我是否必须这样做: koObserv = ko.observable(koObserv() + 1) 这看起来真的很笨拙。。我还缺少另一种方法吗?这里有一把小提琴演示了递增: 如您所见,self.num(self.num()+1)确实有效。如果您使用大量增量,我建议您创建一些辅助函数来执行增量,并将可观察对象的引用传递给它。您最终会得到更可读的代码 JS:
koObserv(koObserv() + 1);
如果没有提供方法,我是否必须这样做:
koObserv = ko.observable(koObserv() + 1)
这看起来真的很笨拙。。我还缺少另一种方法吗?这里有一把小提琴演示了递增:
如您所见,
self.num(self.num()+1)代码>确实有效。如果您使用大量增量,我建议您创建一些辅助函数来执行增量,并将可观察对象的引用传递给它。您最终会得到更可读的代码
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);
}
}
<button data-bind="click: incrementNum.bind($root, num1)">
HTML:
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)">
您可以将这些逻辑抽象为一个扩展的可观察对象
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
您可以执行koObserv(koObserv()+1)代码>。你能在不起作用的地方分享你的代码吗?唯一可能导致问题的地方是,如果它位于计算的可观察对象中,它可能导致递归重新计算