以良好的表达方式增加KnockoutJS可观察量

mar*_*peg 6 increment observable knockout.js

是否有一种紧凑的方式以高度表达的方式增加KnockoutJS可观察量,以便代码获得可读性?

我想避免这种语法:

var counter = ko.observable(0);

// increment the counter as we know today
counter(counter() + 1);
Run Code Online (Sandbox Code Playgroud)

相反,我想要一个更具表现力的语法,如:

counter.increment();
Run Code Online (Sandbox Code Playgroud)

这种API还应该接受一个参数来定义增量的值:

counter.increment(10);
counter.increment(-1);
Run Code Online (Sandbox Code Playgroud)

我在官方文档中没有发现任何类似的内容,此处的其他类似问题仅报告了我认为极难阅读的标准语法.

Jef*_*ado 7

您可以扩展单个observable以支持递增或将其应用于所有可观察对象.

// for individual
ko.extenders['incrementable'] = function (target, enabled) {
    if (enabled) {
        target.increment = function (incValue) {
            this(this() + (incValue || 1));
        }.bind(target);
    }
    return target;
};
var counter = ko.observable(0).extend({ incrementable: true });
counter.increment();

// or for all
ko.observable.fn.increment = function (incValue) {
    this(this() + (incValue || 1));
};
Run Code Online (Sandbox Code Playgroud)