applyBindings()太快,在Ajax请求完成之前调用

时间:2011-09-15 07:16:34

标签: jquery ajax knockout.js

请考虑以下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'); 

3 个答案:

答案 0 :(得分:15)

您的解决方法是正确的做事方式。这是你的'sucess'处理程序,它在返回数据时被调用,这是正确的点,然后填充你的视图模型并应用绑定。

答案 1 :(得分:8)

只有在页面上只有一个ajax调用时,此解决方法才有效。我认为正确的解决方案是首先创建你的viewmodel,id,given1和given2是observables(initally empty)。然后在ajax回调中,你改变那些observable的值。

答案 2 :(得分:0)

更真实的方法是在viewmodel对象中执行你的ajax调用并填充他的属性。