我正在使用knockoutjs并有两个下拉框。 其中一个依赖于另一个。仅此一项工作正常,但我现在想要设置初始值及其选定值。
由于我订阅了第一个下拉框中的更改以加载第二个下拉框,我现在不仅仅加载数据两次,我还在第二个下拉框中放弃了我的初始选择。 原因是我必须在第一次更改其值时清除第二次下拉列表的选择。否则可能会预先选择错误的值。
请参阅:http://jsfiddle.net/sturm/6Mp33/31/
<select name="model" data-bind="options: models, value: selectedModel, optionsText: 'name', optionsValue: 'id', optionsCaption: 'Choose...'"></select>
<select name="makes" data-bind="options: makes, value: selectedMake, optionsText: 'name', optionsValue: 'id', optionsCaption: 'Choose...'"></select>
function viewModel(initialModels, initialSelectedModel, initialMakes, initialSelectedMake) {
var self = this;
self.models = ko.observableArray(initialModels);
self.selectedModel = ko.observable(initialSelectedModel);
self.makes = ko.observableArray(initialMakes);
self.selectedMake = ko.observable(initialSelectedMake);
self.selectedModel.subscribe(function() {
// This runs after the initial data and clears the selection
if (self.selectedModel()) {
$.ajax({
type: 'POST',
url: '/echo/json/',
data: {
json: ko.toJSON(makeData[self.selectedModel()-1])
},
context: this,
success: function(data) {
self.makes(data);
// The folowing line is the problem
self.selectedMake(undefined);
},
dataType: 'json'
});
} else {
self.makes.removeAll();
}
});
};
ko.applyBindings(new viewModel(modelData, 2, makeData[1], 2));
如何在不加载两次并保持选择的情况下干净地设置初始值?
答案 0 :(得分:2)
只需在评论中添加Nemesv的答案即可关闭
更新淘汰赛