【问题标题】:KnockoutJS computed observable within an observableKnockoutJS 在 observable 中计算 observable
【发布时间】:2014-01-22 22:15:49
【问题描述】:

我有一个包含以下 observable 的 ViewModel:

self.obFoo = ko.observable({
    foo: ko.observable(""),
    bar: ko.observable("")
});

现在我想向 obFoo 添加一个新的计算 observable,它依赖于 foo 和 bar,如下所示:

self.obFoo = ko.observable({
    foo: ko.observable(""),
    bar: ko.observable(""),
    foobar: ko.computed(function(){
          return foo() + bar();
    })
});

问题是 foo 和 bar 没有定义在 foobar 的范围内。我尝试将“this”甚至“self.obFoo”作为第二个参数添加到计算中,但都没有奏效。

有没有办法让正确的范围进入计算的 foobar?

【问题讨论】:

    标签: knockout.js this scope self


    【解决方案1】:

    最简单的解决方案是为你的对象创建一个合适的构造函数:

    var MyObject = function(){
        this.foo = ko.observable("foo");
        this.bar = ko.observable("barr");
        this.foobar = ko.computed(function(){
              return this.foo() + this.bar();
        }, this);
    }
    

    并使用构造函数来创建你的对象而不是对象字面量:

    var ViewModel = function () {
        var self = this;
        self.obFoo = ko.observable(new MyObject());
    }
    

    演示JSFiddle.

    【讨论】:

    • 成功了,谢谢。就像我理解的那样 - 将它包装在一个函数中会给你一个适当范围的本地“this”?
    • 包装到一个函数是不够的。您需要传入 this 作为计算的第二个参数,以确保它可以工作。
    【解决方案2】:

    或者你可以这样做:

    var o={
        foo: ko.observable(""),
        bar: ko.observable("")
    
    };
    o.foobar= ko.computed(function(){
              return o.foo() + o.bar();
        });
    
    self.obFoo = ko.observable(o);
    
    
    self.obFoo().foobar();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-27
      • 1970-01-01
      • 2014-10-23
      • 2014-04-17
      • 2014-07-03
      • 2016-11-03
      • 2017-05-27
      • 1970-01-01
      相关资源
      最近更新 更多