我有一个由构造函数创建的视图模型,具有一堆可观察的属性和一堆普通的旧属性。一旦我实例化它,如果我在实例上设置一个值,对该值的更改不会反映在计算的 observable 中。
这是我正在查看的内容的提炼版本:
function ViewModel(active) {
var self = this;
self.active = active;
self.getClasses = ko.computed(function () {
return this.active ? "yup" : "nope";
}, self);
}
var vm = new ViewModel(false);
vm.active = true;
alert(vm.getClasses()); //returns "nope" :/
如果我触摸它所依赖的可观察对象,这个计算的可观察对象将重新评估,但直接调用它会导致使用旧的活动值进行评估。
ko.computed 是否会创建一个忽略父项更新的新闭包?将普通值与可观察值混合是不明智的吗?(计算出的我实际上遇到了问题,它依赖于可观察对象和其他属性,但我不希望其他属性在运行时发生变化。这实际上只是我现在的单元测试中的一个问题。)
我当然可以使 active 成为 observable,但我想知道是否有另一种方法可以做到这一点。