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

请考虑以下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'); ,看起来淘汰赛只能正确绑定alert('here');

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

任何想法,伙计们?

我能想到的唯一工作是将.applyBindings作为$.get函数回调的一部分,如下所示:

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

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

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

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