【问题标题】:Increment a KnockoutJS observable in an good expressive way以一种很好的表达方式增加一个可观察的 KnockoutJS
【发布时间】:2015-03-04 11:28:30
【问题描述】:

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

我想避免这种语法:

var counter = ko.observable(0);

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

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

counter.increment();

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

counter.increment(10);
counter.increment(-1);

我在官方文档中没有找到类似的东西,这里的其他类似问题只报告了我认为极难阅读的标准语法。

【问题讨论】:

    标签: knockout.js increment observable


    【解决方案1】:

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

    // 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));
    };
    

    【讨论】:

    • 谢谢。根据您的示例和扩展程序的一些读数,我相信我可以将“启用”属性更改为配置对象,因此我可以像这样设置默认增量步骤:var counter = ko.observable(0).extend({ incrementable: 10 });
    • 当然。我不确定您是否希望它可配置,但您肯定可以用它做更多的事情。
    猜你喜欢
    • 2016-02-21
    • 2015-09-18
    • 2012-04-20
    • 1970-01-01
    • 2015-09-01
    • 1970-01-01
    • 2017-11-25
    • 2012-11-02
    • 1970-01-01
    相关资源
    最近更新 更多