【问题标题】:Updating dependencies of writable computed observable更新可写计算 observable 的依赖关系
【发布时间】:2013-06-06 08:56:12
【问题描述】:

我正在尝试使用 knockout.js 的计算 observables 在模型上设置类似 C# 的属性。我希望 observable 只接受有效值。简化示例:

function Model()
{
    var a = 100;
    var b = 200;

    var $ = this;
    this.a = ko.computed({
        read: function(){return a},
        write: function(value){
            var newval = parseFloat(value, 10);
            if(newval < 1000) 
                a = newval;
        }});

    this.b = ko.observable(b);
}

写入a hover 不会更新绑定。是否可以启用更改 a,就像它是 Model 的普通成员一样,但附加了额外的功能?

我知道我可以使用第二个 observable 来包含实际值并依赖它的更新机制,但是随着此类计算属性数量的增加,这种方法很快变得很麻烦。

【问题讨论】:

    标签: javascript knockout.js observable writable


    【解决方案1】:

    Computed observable 不适用于您的示例,因为计算出的 observable 是一个应该依赖于一个或多个其他 observable 的函数。

    您可以改用extenders 来实现此目的。这是带有演示的fiddle

    ko.extenders.maxNumber = function(target, option) {
        var result = ko.computed({
            read: target,
            write: function(value){
                var newval = parseFloat(value, 10);
                if (newval < option) {
                    target(newval);
                } else {
                    alert('Number is to big');
                }
            }
        });
    
        result(target());
    
        return result;
    };
    
    function Model() {
        var a = 100;
        this.a = ko.observable(a).extend({ maxNumber: 1000 });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-02
      • 1970-01-01
      • 1970-01-01
      • 2016-04-29
      • 2016-11-03
      • 1970-01-01
      • 1970-01-01
      • 2015-12-28
      相关资源
      最近更新 更多