【发布时间】:2013-04-17 15:12:44
【问题描述】:
我正在尝试使用淘汰赛 js 创建一个延迟加载选择。多亏了淘汰赛,按需加载数据并让它更新 UI 变得很简单。但是,一旦加载数据,我在设置正确的项目时遇到问题。
示例 jsFiddle here
经过一番挖掘,它似乎会覆盖该值,因为它希望将模型与选项相匹配。请参阅 knockout-2.2.1.debug.js 中的“ensureDropdownSelectionIsConsistentWithModelValue”。
这对我来说是个问题,因为在它执行此操作时,没有任何选项,因此它会用 0 覆盖我的模型值。
我对淘汰赛还很陌生,所以我怀疑我正在接近这个错误......有人做到了吗?还是有更好的建议?
我已经阅读了 Ryan 的博客文章 Lazy Loading an Observable in KnockoutJS,但我看不到利用他的方法解决我的问题的方法。
提前感谢您的帮助:)
Ste.
代码示例:
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());
【问题讨论】:
标签: javascript knockout.js lazy-loading