【发布时间】:2015-01-06 11:55:43
【问题描述】:
我正在使用 Knockout 绑定 MVC 视图。这第一次运行良好,但对于后续刷新,Knockout 会引发错误:
错误:您不能对同一个元素多次应用绑定。
这是我的绑定代码(在 Document.Ready 中),注意我使用 setTimeout 每 25 秒运行一次,这就是错误发生的地方:
function viewModel() {
Loading = ko.observable(true),
CurrentUser = ko.observable(),
Environments = ko.observableArray(),
CurrentFormattedDate = ko.observable()
}
function doPoll() {
$.get("/home/getindex")
.done(function (data) {
$(data).each(function (index, element) {
viewModel = data;
viewModel.Loading = false;
viewModel.CurrentFormattedDate = moment().format('MMMM YYYY');
});
ko.applyBindings(viewModel);
})
.always(function () {
setTimeout(doPoll, 25000);
})
.error(function (ex) {
alert("Error");
});
};
doPoll();
DoPoll 被多次调用时如何避免错误?
【问题讨论】:
-
你为什么使用
$(data).each?您似乎从不使用index/element参数,而只是在循环中更新同一个对象。结果将等同于根本不使用循环。另外,我的viewModel对象是错误的。您需要将this放入成员初始化中,例如this.Loading = ...,否则假定的成员将成为全局 变量,这在JS 中是不好的做法!。 -
啊,好地方。该模型以前绑定到一个集合,我忽略了更新代码!