我正在使用Knockout AMD Helpers加载ViewModel,并使用“module binding”功能。
通常,当我需要加载远程数据时,我使用延迟对象来确保仅在ViewModel上的所有数据都可用之后调用ko.ApplyBindings。
我使用延迟的ajax调用创建了一个sample jsfiddle来说明我的问题:
self.initialize = function () {
self.name("This is a sample article");
self.getArticleTypes(self.articleTypes);
};
self.getArticleTypes = function (observableArticleTypes) {
var fakeData = {
delay: 5
};
$.ajax({
async: true,
cache: false,
type: 'post',
url: '/echo/json/',
data: fakeData,
success: function (data) {
observableArticleTypes([{
id: 1,
articleType: 'Breaking News'
}, {
id: 2,
articleType: 'Weather'
}]);
console.log("Data loaded from server");
}
});
};
如何构建我的代码,使用AMD Helpers但延迟ApplyBindings直到我的所有数据都准备好在ViewModel上?
答案 0 :(得分:1)
对于这种情况,applyBindings已经发生,因此您可能希望仅允许可观察的部分在数据可用时更新,或者使用if
或with
或{来控制特定部分{1}}绑定。
例如,您可以将您的区域包裹在:
中template