【发布时间】:2017-01-16 20:44:26
【问题描述】:
具有以下模型:
var dataModel = ko.observable({ someProp: ko.observable() });
var isValid = ko.pureComputed(function () {
return dataModel().isValid;
});
我有以下功能:
function testMe() {
dataModel().isValid = false; // This does not work, why?
console.log("isValid: " + isValid()); // Doesn't update, shows old value
dataModel({ isValid: false }); // This works however I loose all other properties
console.log("isValid: " + isValid()); // Prints correctly updated value
console.log(ko.toJSON(dataModel()));
}
每当我运行 testMe()
dataModel.isValid = false
并执行
console.log("isValid:" + isValid())
即使我在上面将其设置为 false,它仍然设置为“true”...为什么?我让它工作的唯一方法就是做
dataModel({ isValid: false }); 但是这样我就失去了模型中的所有其他属性。我怎样才能做到这一点?
我做错了什么?
【问题讨论】:
-
如果我运行您的代码时在任何情况下都看不到“true”,请参阅this jsfiddle,您能否尝试创建一个“minimal reproducible example”并解释为什么 i> 你期待上述结果吗?
-
另外,请意识到如果(纯)计算依赖于一个不可可观察的变量,它可能无法正确更新。
标签: knockout.js