我们有以下情况:
One select conected to one observable property Countries, and countryId
Another child select conected to StateProvinces and stateProvinceId observable property
A compute generating the dependency between the first and second property (Countris and StateProvinces).
We click Load and simulate load a entity from the server, and update the selected values: countryId and stateProvinceId. The real coding uses the mapping plugin.
为了更清楚,请参阅工作的jsfiddle http://jsfiddle.net/sPTHm代码,然后点击“加载”。
当我们在第48行模拟状态/省选择的异步ajax请求时,我们开始遇到麻烦。当此请求是异步时,加载不起作用,只是因为stateProvinceId在StateProvinces加载之前设置了,它将被重置为null。在此处查看带有StateProvinces异步请求的模拟:http://jsfiddle.net/sPTHm/1/,然后单击“加载”。
我们已经尝试过:限制,计算可观察食谱,延迟评估和大量搜索。在knockoutjs中,这个理想配方是什么?
答案 0 :(得分:0)
我会尝试使用jQuery deferred concept
链接您的ajax请求 return $.when(self.dataSource.getRtuUserData(rtuId))
.then(function (rtuUserData)
{
self.RtuUserData = ko.mapping.fromJS(rtuUserData);
return self.dataSource.getRtuStatus(rtuId);
})
.then(function (rtuStatus)
{
self.RtuStatus = ko.mapping.fromJS(rtuStatus);
return self.dataSource.getRtuLocation(rtuId);
})
dateSource对象上的每个方法都包含一个ajax调用:
self.getRtuLinks = function (rtuId)
{
return $.ajax(
{
url: urlRoot + '/rtus/' + rtuId + '/links',
dataType: 'json',
cache: false,
type: 'GET'
});
}
通过这种方式,您可以同步加载两组数据,这可以解决您的问题。