为什么这样做:
<!-- ko if: show -->
<select data-bind="options: categories, optionsText: 'name', optionsCaption: 'Select', value: selected_category"></select>
<!-- /ko -->
这不是:
<select data-bind="if: show, options: categories, optionsText: 'name', optionsCaption: 'Select', value: selected_category"></select>
换句话说,为什么不能显示布尔值在与'if'的数据绑定内使用?
您可以使用visible
绑定来隐藏选择。
对于更大的问题,if
绑定实际上从物理上删除了与if绑定的元素的所有子DOM,并将其存储在节点缓存中以供以后检索。这是为了防止在那些可能影响其他文档元素的元素内进行任何进一步的绑定。
例如,在下面的代码片段中,如果打开浏览器的元素检查器并反复按下切换按钮,您将看到浏览器注入并删除的innerText span
。
var vm = {
show: ko.observable(true),
toggle: function() {
this.show(!this.show());
}
};
ko.applyBindings(vm);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<span data-bind='if:show'>Show Me</span>
<input type='button' data-bind='click: toggle' value='Toggle' />
并且根据淘汰赛的绑定文档:
相应地,标记内的,如果块可以被添加或表达的变化的结果动态地去除。数据绑定属性将在重新添加时将应用于所包含标记的新副本。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句