【发布时间】:2017-01-07 06:32:37
【问题描述】:
我有一个工作版本的剔除代码,我在其中使用父选择菜单来确定子值应该是什么。
以下是示例: https://jsfiddle.net/mujaji/6zk5crn8/2/
我试图做的是将父级别变成收音机,将子级别变成复选框。
这是我尝试过的: https://jsfiddle.net/mujaji/tju15joe/4/
function ViewModel(items) {
this.levelOne = ko.observableArray(items);
this.selectedLevelOne = ko.observable();
this.selectedLevelTwo = ko.observable();
function getById(items, value) {
if(!value) {
return [];
}
var result = ko.utils.arrayFirst(items, function(item) {
return item.value === value;
});
return result && result.childItems || [];
}
this.levelTwo = ko.computed(function(){
var items = this.levelOne();
var id = this.selectedLevelOne()
return getById(items, id);
}, this);
}
var items = [
{text: "Marvel Superhero", value: "1", childItems: [
{text: 'Captain America', value: '01'},
{text: 'Ironman', value: '02'},
{text: 'Wolverine', value: '03'},
{text: 'Nightcrawler', value: '04'},
{text: 'Spiderman', value: '05'},
{text: 'Hulk', value: '06'},
{text: 'Thor', value: '07'},
{text: 'Hawkeye', value: '08'},
{text: 'Silver Surfer', value: '09'},
{text: 'The Thing', value: '10'},
{text: 'Mr Fantastic', value: '11'}
]},
{text: "Marvel Villian", value: "2", childItems: [
{text: 'Dr. Doom', value: '01'},
{text: 'Magneto', value: '02'},
{text: 'Juggernaut', value: '03'},
{text: 'The Blob', value: '04'},
{text: 'Galactus', value: '05'}
]},
{text: "DC Superhero", value: "3", childItems: [
{text: 'Superman', value: '01'},
{text: 'Batman', value: '02'},
{text: 'Robin', value: '03'},
{text: 'Wonder Woman', value: '04'},
{text: 'Raven', value: '05'},
{text: 'Aquaman', value: '06'}
]},
{text: "DC Villian", value: "4", childItems: [
{text: 'Lex Luthor', value: '01'},
{text: 'Joker', value: '02'},
{text: 'Grundy', value: '03'},
{text: 'The Riddler', value: '04'},
{text: 'Lobo', value: '05'}
]}
];
var module = {};
module.sampleViewModel = new ViewModel(items);
ko.applyBindings(module.sampleViewModel, document.getElementById("override-more"));
有人对从选择转换为单选/复选框有什么建议吗?
有没有更好的方法来做我正在尝试的事情?
【问题讨论】:
-
您希望复选框如何实际工作?您将它们绑定到单个可观察对象,您是否希望它们看起来像复选框但仍然像单选按钮一样起作用?还是希望它们像多选一样发挥作用:将所有选中的值添加到数组中?
-
啊!我明白你的意思了。理想情况下,我想将所有检查值添加到数组中
-
这是已解决的收音机的更新小提琴:jsfiddle.net/mujaji/tju15joe/5
-
为了进一步解释我的意图...如果选择了父收音机,则将子收音机显示为所选收音机的复选框
-
查看我的更新答案
标签: jquery json knockout.js