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 获取。

当模型刷新时,这些副本没有更新,因为它们不是从 AJAX 请求返回的视图模型数据的一部分。结果没有竞争条件。

于 2013-03-20T17:15:30.730 回答