【发布时间】:2011-12-25 09:08:39
【问题描述】:
我发现在我的应用程序中重复了很多以下模式(请参见下面的代码)。 我必须调用 BindMyEvents(true) 进行第一次加载,然后调用 BindMyEvents(false) 进行后续数据检索。
它是延迟加载的,所以我不希望将数据序列化到 HTML 源中。有没有比将布尔标志传递到我的 Bind() 方法更好的方法?是否有通过淘汰赛实现这一目标的标准模式?
我在想我是否应该在视图模型定义中设置 viewAlertsModel.alerts = null,然后让 Bind 函数检查这一点。如果设置为 null 则调用映射方法,然后调用 applyBindings()?
function BindMyEvents(initialMap) {
// get alerts, map them to UI, then run colorbox on each alert
$.getJSON("/Calendar/MyEvents/", {},
function (data) {
if ( initialMap ) {
// set-up mapping
viewAlertsModel.alerts = ko.mapping.fromJS(data);
ko.applyBindings(viewAlertsModel,$("#alertedEventsContainer")[0]);
} else {
// update
ko.mapping.fromJS(data, viewAlertsModel.alerts);
}
});
}
【问题讨论】:
-
你的问题回答了我的问题。我没有意识到 fromJS 函数上的第二个参数有一个选项,它指向一个现有的模型。感谢分享!
标签: javascript knockout.js knockout-mapping-plugin