我正在尝试使用淘汰赛 js 创建一个延迟加载选择。多亏了淘汰赛,按需加载数据并让它更新 UI 变得很简单。但是,一旦加载数据,我就无法设置正确的项目。
此处为示例 jsFiddle
经过一番挖掘后,似乎敲除会覆盖该值,因为它希望将模型与选项匹配。请参阅 knockout-2.2.1.debug.js 中的“ensureDropdownSelectionIsConsistentWithModelValue”。
这对我来说是个问题,因为在它这样做的时候,没有选项,所以它用 0 覆盖了我的模型值。
我对淘汰赛还很陌生,所以我怀疑我正在接近这个错误......有没有人做到这一点?或者有更好的建议方法?
我已经阅读了 Ryan 的博客文章Lazy Loading an Observable in KnockoutJS,但我看不到利用他的方法解决我的问题的方法。
在此先感谢您的帮助:)
圣。
代码示例:
html:
<select data-bind="options: $data.choice.options, optionsText: 'text', optionsValue: 'value', value: $data.choice"></select>
JS:
var optionsProvider = (function () {
"use strict";
var self = {};
//container for options data, a sort of dictionary of option arrays.
self.options = {};
self.init = function (optionData) {
//pre-populate any provided options data here...
};
self.get = function(name) {
if (!self.options[name]) {
self.options[name] = ko.observable([]);
//ajax request for options
//populate self.options[name] with options upon return
//dummy this with below for example.
setTimeout(function() {
self.options[name]([
{ text : "option1", value : 1 },
{ text : "option2", value : 2 },
{ text : "option3", value : 3 },
]);
}, 1000); //simulate some delay
}
//return reference to observable immediately.
return self.options[name];
};
return self;
})();
var simpleModel = function() {
this.choice = ko.observable(2); //hard code selected option to simulated pre-saved selection.
this.choice.options = optionsProvider.get("SomeOptionType");
};
ko.applyBindings(new simpleModel());