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)。你能在不起作用的地方分享你的代码吗?唯一可能导致问题的地方是,如果它位于计算的可观察对象中,它可能导致递归重新计算