作用
if 绑定控制文档的一块区域显示,if 表达式为 true时显示,否则不显示。
if 和 visible bind 作用相似。区别在于,visible包含DOM代码,只是利用css来控制DOM显示与否;但是if 绑定是如果表达式为false,就移除了改DOM节点,如果为 true 就展示出来。
例子 1
<label><input type="checkbox" data-bind="checked: displayMessage" /> Display message</label>
<div data-bind="if: displayMessage">Here is a message. Astonishing.</div>
ko.applyBindings({
displayMessage: ko.observable(false)
});
例子2
<ul data-bind="foreach: planets">
<li>
Planet: <b data-bind="text: name"> </b>
<div data-bind="if: capital">
Capital: <b data-bind="text: capital.cityName"> </b>
</div>
</li>
</ul>
<script>
ko.applyBindings({
planets: [
{ name: 'Mercury', capital: null },
{ name: 'Earth', capital: { cityName: 'Barnsley' } }
]
});
</script>
例子2 中,只有当 capital 有对象的时候,才会有子节点的代码执行。
if 绑定是很重要的,它能让代码正常工作。 比如上面的例子,如果没有 if 绑定, 那么当 capital 为空的时候, 子节点 capital.cityName 这个属性是不存在的,代码会报错。
参数
js表达式,返回true或者false
如果表达式包含 observable 变量,那么当变量值重新计算时,表达式的值也会被重新计算。相应的,当表达式的值被重新计算后 ,if 里面的代码块会被重新添加或者移除 。当重新添加代码块时,data-bind 属性会被应用到原来代码的新拷贝上。
注意 使用 if 时不要使用包含元素
<ul>
<li>This item always appears</li>
<li>I want to make this item present/absent dynamically</li>
</ul>
加入li需要 if 来控制显示与否,而ul中又不允许使用其他元素,那么这时候可以用虚拟元素绑定,像下面这样。
<ul>
<li>This item always appears</li>
<!-- ko if: someExpressionGoesHere -->
<li>I want to make this item present/absent dynamically</li>
<!-- /ko -->
</ul>