我正在尝试将来自服务器的模型通过json绑定到我在客户端上创建的viewmodel,然后使用Knockout.js绑定它以显示数据。我有以下代码
function tireRunDataViewModel() {
var self = this;
self.load = function() {
$.jQuery.post('./GetTireRunModel', { outingID: '@Model' }, function (result) {
self.data = ko.mapping.fromJS(result);
} , "json");
};
self.load();
}
var viewModel = new tireRunDataViewModel();
ko.applyBindings(viewModel);
好像在完成ko.applyBindings之前没有设置self.data。为什么这样做以及如何确保在完成applyBindings之前填写self.data?
答案 0 :(得分:1)
对$.jQuery.post
的调用是异步的,因此回调在完成之前不会执行,这是在ko.applyBindings
被调用之后。
有两种选择:
您可以在回调中拨打ko.applyBindings
。如果您的应用程序并不复杂,那么在AJAX调用完成后应用绑定可以是一个选项。
您可以创建self.data
作为observable,然后在回调中更新它,如:self.data(ko.mapping.fromJS(result));
。然后,在您的用户界面中,您可以在依赖于with
的UI周围data
使用data
绑定,以便在它准备好之前不会呈现。