通过 Durandal (v. 1.2) 使用 Knockout,Knockout Observable 在作为 AJAX 调用的结果被更新后不会更新绑定,除非是第一次。
视图模型:
define(["require", "exports"], function(require, exports) {
var About = (function () {
function About() {
var _this = this;
this.Code = ko.observable("Initial Content");
$.get("MyXml.xml", function (data) {
return _this.DataLoaded(data);
}, "text");
}
About.prototype.DataLoaded = function (data) {
this.Code(data.toString());
};
return About;
})();
return About;
});
看法:
<div>
<h2>About</h2>
<p data-bind="text: Code"></p>
</div>
视图模型通过 Durandals 作曲家绑定到视图,但我在使用 vanilla Knockout 时遇到了同样的问题。文件的内容在第一次组合视图时正确显示,但是当再次组合视图时,绑定在初始值之后不会更新。文件被加载,更新可观察的代码被调用,没有抛出错误。以前我只是通过使用 setInterval 延迟更新来解决问题。再加上它第一次工作的事实,我认为这是一个竞争条件错误。但我无法弄清楚问题是什么。
是否有任何时间段不应该更新 observable?有没有一个好的模式来避免这种情况?
编辑
现在我正在使用 viewAttached 方法(Durandal)来了解何时可以安全更新,但我仍然想知道根本原因,以及可能的任何更好的解决方案。