我有两个下拉菜单,取决于其他(级联)。 “MainCategories”上的选择决定了“SubCategories”的项目。 此外,“MainCategories”上的选择也决定了表格行的可见性。 以下是我的尝试:
<table>
<tbody data-bind="foreach: contacts">
<tr>
<td>MainCategories:
<select data-bind='options: MyCategories, value: mycategory, optionsText: "Type", optionsValue: "Type",optionsCaption: "Select..."'></select>
</td>
<td>
<!-- ko with: mycategory -->SubCategories:
<select data-bind='options: Categories, optionsText: "Category", optionsCaption: "Select...", value: $parent.product'></select>
<!-- /ko -->
</td>
</tr>
<tr data-bind="visible:mycategory()=='Type1'">
<td>I am visible</td>
</tr>
</tbody>
</table>
<script type = "text/javascript" >
var MyCategories = [{
"Categories": [{
"Category": "Category1"
}, {
"Category": "Category2"
}],
"Type": "Type1"
}, {
"Categories": [{
"Category": "Category3"
}, {
"Category": "Category4"
}],
"Type": "Type2"
}];
var initialData = [{
category: "Mobile",
product: "Nokia"
}];
var ContactsModel = function (contacts) {
var self = this;
self.contacts = ko.observableArray(ko.utils.arrayMap(contacts, function (contact) {
return {
mycategory: ko.observable(contact.category),
product: ko.observable(contact.product)
};
}));
};
ko.applyBindings(new ContactsModel(initialData));
</script>
如果我删除 optionsValue:“输入”,那么'SubCategories'会获得正确的项目。但表行的可见性不能按预期工作。 如果我有 optionsValue:“类型”,那么“SubCategories”就不会被填充。而且,当我更改'MainCategories'的选项1或2次时,只有可见性才能正常工作。
请帮助我找到我在这里做错的事。 谢谢,
答案 0 :(得分:2)
我读了你的问题,我觉得如果不能解决问题就能解决问题,你可以应用它 -
* 问题* -
您需要使用Knockout进行级联下拉菜单以选择值并将您的observable设置为等于子选择的所选对象。
* 解决方案* -
使用computed来使第二个下拉列表依赖于第一个下拉列表。示例 -
var selectedParent = ko.observable();
var parentCategories = ko.observableArray(MyCategories);
var childCategories = ko.computed(function () {
if (!selectedParent()) { return new Array(); }
var childArray = [];
// get the values you want for the child here
return childArray;
});
通过添加if(!selectedParent()),您将使childCategories依赖于selectedParent。每当选择更改时,childCategories将自动更新。
然后您的观点可能是这样的 -
<td>MainCategories:
<select data-bind='options: parentCategories, value: selectedParent, optionsText: "Type", optionsValue: "Type",optionsCaption: "Select..."'></select>
</td>
<td> SubCategories:
<select data-bind='options: childCategories, optionsText: "Category", optionsCaption: "Select...", value: $parent.product'></select>
<!-- /ko -->
</td>