当前位置: 首页 > 工具软件 > Knockout.js > 使用案例 >

knockoutjs -- if 绑定

拓拔烨赫
2023-12-01
参考:[url]http://knockoutjs.com/documentation/if-binding.html[/url]

If 绑定用来控制一部分html标签是否生成在DOM树中(html标签有data-bind属性)。只有if的[color=red]条件表达式等于true(或者是类似true的值,如非null的对象,非空字符串)[/color],那么对应的html才会被输出,否则不会被输出到客户端。

If绑定和visible绑定类似,[color=red]不同之处[/color]在于:对于visible绑定,包含的html标签内容一直会存在在DOM树中,它只是用css来控制这些元素时候显示。而对于if绑定,它是物理的往DOM树中增加或者移除那部分html标签。

[b]例子:用if绑定来根据checkbox的值动态增加或者移除html片段[/b]

View:
<label><input type="checkbox" data-bind="checked: displayMessage" /> Display message</label>

<div data-bind="if: displayMessage">Here is a message. Astonishing.</div>

<script>
// View model:
ko.applyBindings({
displayMessage: ko.observable(false)
});
</script>

[b]if 绑定参数:[/b]
[list]
[*]用来计算的表达式。如果表达式的值为true(或者类似true的值),[color=red]那么包含的html内容就会被输出到DOM树中,包含html内容中的任何data-bind属性都会被应用。[/color]如果表达式的值为false[color=red],那么包含的html内容就会被从DOM树中移除,同时包含的任何data-bind属性也不会被应用。[/color]
[*]表达式包含观察者变量。如果表达式包含任何一个观察者变量,[color=red]那么在变量值发生变化时,表达式都会被重新计算。[/color]对应的html内容就会根据计算的结果动态地加到DOM树中,或者从DOM树中移除。当增加部分的html内容中包含data-bind属性,那么这些绑定都会被启用
[/list]
[b]没有容器元素下使用if绑定:[/b]
有时候,可能需要再没有任何外部容器元素的情况下,使用if绑定来控制html片段的增加或者移除。譬如如下例子,想要动态控制ul下第二个li。如果把if放到ul里面,那么第一个li也会被影响到;同时也不能用任何元素来包住li,因为html不允许这么做。
<ul>
<li>This item always appears</li>
<li>I want to make this item present/absent dynamically</li>
</ul>

这种情况下,可以[color=red]使用基于html注释标签的无容器控制流语法[/color]:如下
<ul>
<li>This item always appears</li>
<!-- ko if: someExpressionGoesHere -->
<li>I want to make this item present/absent dynamically</li>
<!-- /ko -->
</ul>

[color=red]用<!-- ko --> 和 <!-- /ko --> 注释这样的一对html标签[/color],来定义一个“虚拟的元素”来包含html内容。Knockout会理解这个虚拟元素的语法并正确处理
 类似资料: