KnockoutJS 3.X API 第四章 数据绑定 控制流if绑定和ifnot绑定

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了KnockoutJS 3.X API 第四章 数据绑定 控制流if绑定和ifnot绑定相关的知识,希望对你有一定的参考价值。

if绑定目的

if绑定一般是格式是data-bind=if:attribute,if后所跟属性或表达式的值应为bool值(也可以是非bool值,当非空字符串时则为真),if绑定的作用与visible绑定的作用类似。可控制DOM的显示与隐藏,不一样的地方是,if绑定是物理删除或添加DOM元素。

示例1

该例展示IF绑定的动态删除添加DOM:

Here is a message. Astonishing.

UI源码:

<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

该示例中,通过foreach绑定循环planets监控属性数组,其中name为Mercury的项目中capital为null,则循环中该项目只显示其name.

<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>

备注:使用无容器的if绑定(if虚拟绑定)

像之前的虚拟绑定一样,同样使用<!-- ko --><!-- /ko -->进行。虚拟绑定适用于不改变UI元素的情况。

<ul>
    <li>This item always appears</li>
    <!-- ko if: someExpressionGoesHere -->
        <li>I want to make this item present/absent dynamically</li>
    <!-- /ko -->
</ul>

ifnot绑定

ifnot绑定是if绑定的逆向表达,格式与if绑定一样,只是判断结果与if整好相反。就像等于和不等于一样。例如:

<div data-bind="ifnot: someProperty">...</div>

其等效写法为:

<div data-bind="if: !someProperty()">...</div>

有人会说使用if绑定是足够了。为毛还要ifnot绑定。原因是有很多强迫症患者喜欢这种ifnot的绑定方式,看起来更易懂,代码更整洁。

以上是关于KnockoutJS 3.X API 第四章 数据绑定 控制流if绑定和ifnot绑定的主要内容,如果未能解决你的问题,请参考以下文章

KnockoutJS 3.X API 第四章 数据绑定 控制流foreach绑定

KnockoutJS 3.X API 第四章 数据绑定 控制流with绑定

KnockoutJS 3.X API 第四章 数据绑定 控制流if绑定和ifnot绑定

KnockoutJS 3.X API 第四章 表单绑定(10) textInputhasFocuschecked绑定

KnockoutJS 3.X API 第二章 数据监控视图模型与监控

KnockoutJS 3.X API 第八章 映射(mapping)插件