0

ドロップダウンがあります:

<select data-bind="options: activeFilters, optionsValue:'value', value:funkyThingActiveFilter, optionsText:'text'"

このドロップダウンから何かを選択すると、関数が呼び出されてモデル全体が更新されます

model.funkyThingActiveFilter.subscribe(function (newVal) {
        model.filterResults();


});

filterResults 関数は、AJAX を介してビューモデルの更新を取得します。

var url = '@Url.Action(MVC.funkyThingsController.IndexJSON())' + "?funkyThingActiveFilter=" + model.funkyThingActiveFilter();

 $.ajax({
           url: url,
           dataType: 'json',
           success: function (returnedData) {
               ko.mapping.fromJS(returnedData, {}, model);
              }
         });

問題は、サブスクライバーがモデルの更新を確認すると、競合状態が発生することです。filterResults 関数にノックアウト スロットルを設定しようとしましたが、これは競合状態を遅らせるだけです。

また、セマフォの作成も試みました。ここでは、filterResults 関数が inFunction 型の変数を設定します。ただし、バインディングが非同期的に更新されるように見えるため、これは機能しませんでした。

ページがぐるぐる回るのを止めるにはどうすればいいですか?!

4

1 に答える 1

0

これを解決するために、ノックアウト ビューモデルの作成時にフィルターのコピーを作成しました。次に、ドロップダウンをコピーにバインドし、コピーをパラメーターとして AJAX get に渡しました。

モデルが更新されたとき、これらのコピーは更新されませんでした。これらのコピーは、AJAX 要求から返されるビューモデル データの一部ではなかったからです。その結果、競合状態はありません。

于 2013-03-20T17:15:30.730 に答える