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

YS.*_*YS. 7 ajax jquery 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));
Run Code Online (Sandbox Code Playgroud)

似乎我的ajax呼叫$.get太慢或者ko.applyBindings()太快了.无论哪种方式,如果我取消注释该行,似乎敲除只能正确绑定alert('here');.

如果我留下评论,则不会填充任何控件.

任何想法,伙计们?

我能想到的唯一工作就是像这样做.applyBindings函数回调的一部分$.get:

$.get("testSynUfGet.aspx", null, function (data) {
    ko.applyBindings(new viewModel(data.id, data.given1, data.given2));
}, 'json'); 
Run Code Online (Sandbox Code Playgroud)

Mar*_*son 15

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


Gnu*_*fos 8

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