使用ko observableArray使用查找数据调用异步AJAX?

时间:2014-04-16 20:27:39

标签: ajax knockout.js

我有一个observableArray选项绑定到以下内容:

<select data-bind="options: lookupData.options, optionsText: 'DisplayName', optionsValue: 'Id', value: optionId" />

当我第一次应用绑定时,options()可观察数组为空 - 发送异步AJAX调用以检索这些选项。

大部分时间,这都很完美。但是,如果我在AJAX调用返回之前非常快速地显示视图,则会显示下拉列表并选择默认选项,但选项可用。但是,所选选项尚未更新。

换句话说 - 如果我有&#39;蓝&#39;作为当前选择的选项,但在AJAX调用完成之前显示选择标记,&#39;蓝色&#39;填充observableArray选项后,不会选中此选项。

我是否缺少一些语法来使其工作?

代码:

   // getLookupData()
   var lookupData = {};
   lookupData.colors = ko.observableArray();
   $.ajax({
            type: "POST",
            url: getAllergyRelationshipListUrl.url,
            async: true,
            data: new Object(),
            dataType: "json",
            contentType: "application/json"
        }).done(function(data, textStatus, jqXhr) {
            lookupData.colors(data.Data);
        });

   return lookupData;

   // colorVm
   if (vm.colorLookupData == null) {       
      vm.colorLookupData = getLookupData();
   }

   ko.applyBindings(vm);

1 个答案:

答案 0 :(得分:3)

这是淘汰选择的已知问题。在您的ajax完成之前,value options中不存在optionsvalue约束强制您的options成为valueAllowUnset之一。

自版本3.1以来,这已在淘汰赛中解决,引入了<select data-bind="valueAllowUnset: true, options: lookupData.options, optionsText: 'DisplayName', optionsValue: 'Id', value: optionId" />

将绑定更新为:

{{1}}

你可以在这里阅读http://knockoutjs.com/documentation/value-binding.html#using-valueallowunset-with-select-elements