87941631 2012-06-14
参考:http://knockoutjs.com/documentation/if-binding.html
If绑定用来控制一部分html标签是否生成在DOM树中(html标签有data-bind属性)。只有if的条件表达式等于true(或者是类似true的值,如非null的对象,非空字符串),那么对应的html才会被输出,否则不会被输出到客户端。
If绑定和visible绑定类似,不同之处在于:对于visible绑定,包含的html标签内容一直会存在在DOM树中,它只是用css来控制这些元素时候显示。而对于if绑定,它是物理的往DOM树中增加或者移除那部分html标签。
例子:用if绑定来根据checkbox的值动态增加或者移除html片段
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>
if绑定参数:
没有容器元素下使用if绑定:
有时候,可能需要再没有任何外部容器元素的情况下,使用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>
这种情况下,可以使用基于html注释标签的无容器控制流语法:如下
<ul> <li>This item always appears</li> <!-- ko if: someExpressionGoesHere --> <li>I want to make this item present/absent dynamically</li> <!-- /ko --> </ul>
用<!--ko-->和<!--/ko-->注释这样的一对html标签,来定义一个“虚拟的元素”来包含html内容。Knockout会理解这个虚拟元素的语法并正确处理
我们来看看如果使用Knockout更简单的来实现密码强度的验证。原有代码请查看: 代码如下:。输入密码:<input type="password" size="10" onkeyup="pwStre