KnockoutJS在一个可观察量内计算可观察量

时间:2014-01-21 11:34:14

标签: knockout.js this scope self

我有一个包含以下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?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:3)

或者你可以这样做:

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();