这令人费解。这是一个小提琴http://jsfiddle.net/sujesharukil/TCJjN/1/
我有一个简单的视图模型,它包含一个计算的 observable。如果特定的私有变量 _editing 设置为 true,则计算出的 observable 将返回 ""。现在 _editing 不是可观察的。如果 _editing 为 false,则计算出的 observable 会查看 observable 并返回计算值。
var expressionItem = function(){
this.id = 10;
this.value = ko.observable()
};
var vm = function(){
var textVal = ko.observable(),
_editing = false,
expression = ko.observable(),
displayVal = ko.computed(function(){
if(_editing)
return '';
if(expression() === undefined)
return '';
expression().value(textVal());
return ko.toJSON({Id: expression().id, Value: expression().value()});
}),
edit = function(){
_editing = true;
textVal('enter new value here');
_editing = false;
};
expression(new expressionItem());
return {
textVal: textVal,
displayVal: displayVal,
edit: edit
}
}
ko.applyBindings(vm());
这工作正常,直到我将 _editing 标志设置为 false。一旦我这样做,并将其重置为 true,计算的 observable 将不再触发。
我已经注意到的点。1. 如果我将 _editing 设置为可观察的,那么所有工作都可以正常工作,因为当可观察的发生变化时,显然会触发计算。2. 如果我将 _editing 保留为不可观察并在我检查之前访问可观察属性,那么一切正常。
所以,我的问题是
- 为什么会有这种行为?
- 计算出的 observable 如何被重新评估?