【发布时间】:2013-07-18 23:58:37
【问题描述】:
通过 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 时遇到了同样的问题。 文件的内容在第一次组合视图时正确显示,但是当再次组合视图时,绑定在初始值之后不会更新。加载文件,并调用更新 observable 的代码,没有抛出错误。 以前我只是通过使用 setInterval 延迟更新来解决问题。再加上它第一次工作的事实,对我来说这是一个竞争条件错误。但我不知道问题出在哪里。
是否有任何时间段不应该更新 observable?有没有一个好的模式可以避免这种情况?
编辑
目前我正在使用 viewAttached 方法 (Durandal) 来了解何时可以安全更新,但我仍然想知道根本原因,以及可能的任何更好的解决方案。
【问题讨论】:
标签: javascript mvvm knockout.js durandal