请考虑以下ViewModel代码段:
var id, given1, given2;
$.get("testSynUfGet.aspx", null, function (data) {
id = data.id;
given1 = data.given1;
given2 = data.given2;
}, 'json');
//alert('here');
ko.applyBindings(new viewModel(id, given1, given2));
似乎我通过$.get
拨打的ajax太慢或ko.applyBindings()
太快了。无论哪种方式,如果我取消注释行alert('here');
,似乎敲门只能正确绑定。
如果我留下评论,则不会填充任何控件。
任何想法,伙计们?
我能想到的唯一工作就是.applyBindings
作为$.get
函数回调的一部分,如下所示:
$.get("testSynUfGet.aspx", null, function (data) {
ko.applyBindings(new viewModel(data.id, data.given1, data.given2));
}, 'json');
答案 0 :(得分:15)
您的解决方法是正确的做事方式。这是你的'sucess'处理程序,它在返回数据时被调用,这是正确的点,然后填充你的视图模型并应用绑定。
答案 1 :(得分:8)
只有在页面上只有一个ajax调用时,此解决方法才有效。我认为正确的解决方案是首先创建你的viewmodel,id,given1和given2是observables(initally empty)。然后在ajax回调中,你改变那些observable的值。
答案 2 :(得分:0)
更真实的方法是在viewmodel对象中执行你的ajax调用并填充他的属性。