为下拉列表预选一个值
Preselecting a value for dropdownlist
我的 javascript 代码如下:
var myobservablearray = ko.observableArray(["toys", "books"]);
var myselectedobservable = ko.observable();
var myotherObservableArray = ko.observableArray([{
"toys": [{
"name": "Bungle",
"isselected": true
}, {
"name": "George"
}, {
"name": "Zippy"
}]
}, {
"books": [{
"name": "Book1",
"isselected": true
}, {
"name": "Book2"
}, {
"name": "Book3"
}]
}]);
var myselectedotherobservable = ko.observable();
我想创建一个级联下拉列表
我的第一个下拉代码如下..
<select data-bind="options: $root.myobservablearray, value: myselectedobservable"></select>
如何创建级联下拉菜单,使该下拉菜单中所选选项的预选值为 isselected=true 的值。
真诚感谢任何帮助
谢谢
你这里发生了几件事。你有一个结构来映射每个玩具和书籍的值。您将使用它来获取依赖 select 的选项,但它本身不需要是数组。
主要 select 很简单,有选项和值。从属 select 将从计算的可观察对象中获取其选项,该可观察对象还将值设置为已设置 isselected
的条目。
如果您还希望 selected 值更新设置了 isselected
的项目,可能需要重新排列更多代码。
更新依赖列表更新后,Knockout需要一点时间来设置select。默认情况下,它将列表中的第一项设置为 selected。为了确保在设置列表后我们的默认值是 selected,我添加了一个 setTimeout
(并将默认值 selection 从计算列表中分离出来)。
vm = (function() {
var myobservablearray = ko.observableArray(["toys", "books"]),
value1 = ko.observable(),
value2 = ko.observable();
var dependentOptions = {
"toys": [{
"name": "Bungle"
}, {
"name": "George",
"isselected": true
}, {
"name": "Zippy"
}],
"books": [{
"name": "Book1",
"isselected": true
}, {
"name": "Book2"
}, {
"name": "Book3"
}]
};
var options2 = ko.computed(function() {
if (value1() === undefined) return;
return dependentOptions[value1()];
});
options2.subscribe(function(newValue) {
setTimeout(function() {
for (var i = 0; i < newValue.length; ++i) {
var item = newValue[i];
if (item.isselected) {
console.debug("Found selected");
value2(item);
}
}
}, 0);
});
return {
options1: myobservablearray,
options2: options2,
value1: value1,
value2: value2
};
}());
ko.applyBindings(vm);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<select data-bind="options: options1, value: value1"></select>
<select data-bind="options: options2, optionsText: 'name', value: value2"></select>
我的 javascript 代码如下:
var myobservablearray = ko.observableArray(["toys", "books"]);
var myselectedobservable = ko.observable();
var myotherObservableArray = ko.observableArray([{
"toys": [{
"name": "Bungle",
"isselected": true
}, {
"name": "George"
}, {
"name": "Zippy"
}]
}, {
"books": [{
"name": "Book1",
"isselected": true
}, {
"name": "Book2"
}, {
"name": "Book3"
}]
}]);
var myselectedotherobservable = ko.observable();
我想创建一个级联下拉列表
我的第一个下拉代码如下..
<select data-bind="options: $root.myobservablearray, value: myselectedobservable"></select>
如何创建级联下拉菜单,使该下拉菜单中所选选项的预选值为 isselected=true 的值。
真诚感谢任何帮助
谢谢
你这里发生了几件事。你有一个结构来映射每个玩具和书籍的值。您将使用它来获取依赖 select 的选项,但它本身不需要是数组。
主要 select 很简单,有选项和值。从属 select 将从计算的可观察对象中获取其选项,该可观察对象还将值设置为已设置 isselected
的条目。
如果您还希望 selected 值更新设置了 isselected
的项目,可能需要重新排列更多代码。
更新依赖列表更新后,Knockout需要一点时间来设置select。默认情况下,它将列表中的第一项设置为 selected。为了确保在设置列表后我们的默认值是 selected,我添加了一个 setTimeout
(并将默认值 selection 从计算列表中分离出来)。
vm = (function() {
var myobservablearray = ko.observableArray(["toys", "books"]),
value1 = ko.observable(),
value2 = ko.observable();
var dependentOptions = {
"toys": [{
"name": "Bungle"
}, {
"name": "George",
"isselected": true
}, {
"name": "Zippy"
}],
"books": [{
"name": "Book1",
"isselected": true
}, {
"name": "Book2"
}, {
"name": "Book3"
}]
};
var options2 = ko.computed(function() {
if (value1() === undefined) return;
return dependentOptions[value1()];
});
options2.subscribe(function(newValue) {
setTimeout(function() {
for (var i = 0; i < newValue.length; ++i) {
var item = newValue[i];
if (item.isselected) {
console.debug("Found selected");
value2(item);
}
}
}, 0);
});
return {
options1: myobservablearray,
options2: options2,
value1: value1,
value2: value2
};
}());
ko.applyBindings(vm);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<select data-bind="options: options1, value: value1"></select>
<select data-bind="options: options2, optionsText: 'name', value: value2"></select>