1

我们有以下场景:

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代码,然后单击“加载”。

我们在模拟state/province select的async ajax请求时开始遇到麻烦,在第48行。当这个请求是async时,加载不起作用,只是因为stateProvinceId是在StateProvinces加载之前设置的,并且它将被重置为空。在此处查看带有 StateProvinces 异步请求的模拟:http: //jsfiddle.net/sPTHm/1/,然后单击“加载”。

我们已经尝试过:节流阀、计算出的 observable 配方、deferEvaluation 和大量搜索。在knockoutjs中,理想的配方是什么?

4

1 回答 1

0

我会尝试使用jQuery 延迟概念链接您的 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'
    });
}

这样,您可以同步加载两组数据,这应该可以解决您的问题。

于 2013-01-23T11:39:16.567 回答