knockout.js - 以一种很好的表达方式增加一个 KnockoutJS observable

标签 knockout.js increment observable

是否有一种紧凑的方法可以以高表现力的方式增加 KnockoutJS observable,从而提高代码的可读性?

我想避免这种语法:

var counter = ko.observable(0);

// increment the counter as we know today
counter(counter() + 1);

相反,我想要一个更具表现力的语法,例如:
counter.increment();

这种 API 还应该接受一个参数来定义增量的值:
counter.increment(10);
counter.increment(-1);

我在官方文档和其他类似问题中没有发现任何类似的问题,这里只报告了标准语法,在我看来,这非常难以阅读。

最佳答案

您可以扩展单个 observable 以支持递增或将其应用于所有 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));
};

关于knockout.js - 以一种很好的表达方式增加一个 KnockoutJS observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27804726/

相关文章:

knockout.js - 通过 knockout 的规范方法计算了 CoffeeScript 中正确的可观察值

javascript - 使用 Knockout.js 和 Ajax 上传附件

c - 指针运算 :++*ptr or *ptr++?

C 条件增量

javascript - Observable - 401 导致 forkJoin 出错

Angular forkJoin 订阅未触发

jquery - KnockoutJS 和 $.ajax - firebug 不会在成功回调内的断点处停止

javascript - Knockout js - 获取可观察的字符串长度

python - 使用 for 循环将两个变量一起迭代

javascript - 在 Angular Observables 中订阅后记录数据