我有一个类别下拉列表,用于控制子类别下拉列表。如果子类别数组对于所选类别为空,我想隐藏子类别下拉列表。
以下示例代码:
<script>
self.categories = ko.observableArray([
{"name": "top 1", "subcategories":[
{"name": "sub 1"},
{"name": "sub 2"}
]},
{"name": "top 2", "subcategories":[]}
]);
self.selected_category = ko.observable();
self.selected_sub_category = ko.obserable();
</script>
<div>
<select data-bind="options: categories, optionsText: "name", optionsCaption: "Select", value: selected_category"></select>
</div>
<div data-bind="with:selected_category">
<select data-bind="options: subcategories, optionsText: "name", optionsCaption: "Select", value: selected_sub_category"></select>
</div>
答案 0 :(得分:11)
您需要将with
绑定与if
(或visible
)绑定结合起来,您可以在其中指定条件:
<div data-bind="with: selected_category">
<!-- ko if: subcategories.length > 0 -->
<select data-bind="options: subcategories, optionsText: 'name',
optionsCaption: 'Select', value: $parent.selected_sub_category"></select>
<!-- /ko -->
</div>
请注意$parent
中value: $parent.selected_sub_category
的使用情况,您需要访问“父”对象,因为with
会创建子上下文。
如果您不希望在子集合为空时呈现整个div
,那么您需要将with
和if
移到div
之外,因为KO不允许在同一元素上使用多个控制流绑定。
因此,在这种情况下,您的HTML将如下所示:
<!-- ko with:selected_category -->
<!-- ko if: subcategories.length > 0 -->
<div class="mydiv">
<select data-bind="options: subcategories, optionsText: 'name',
optionsCaption: 'Select',
value: $parent.selected_sub_category">
</select>
</div>
<!-- /ko -->
<!-- /ko -->