我有一个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);
答案 0 :(得分:3)
这是淘汰选择的已知问题。在您的ajax完成之前,value
options
中不存在options
,value
约束强制您的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