我有一个包含以下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?
答案 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();