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コードを参照し、[ロード]をクリックします。

48行目でstate/Province selectの非同期ajaxリクエストをシミュレートすると、問題が発生し始めます。このリクエストが非同期の場合、StateProvinceIdがロードされる前にstateProvinceIdが設定されているため、ロードは機能しません。 nullにリセットされます。ここでStateProvincesの非同期リクエストを使用したシミュレーションを参照してください:http://jsfiddle.net/sPTHm/1/、[ロード]をクリックします。

スロットル、計算された観測可能なレシピ、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'
    });
}

このようにして、2 つのデータ セットを同期的に読み込むことができ、問題が解決するはずです。

于 2013-01-23T11:39:16.567 に答える