`
desert3
  • 浏览: 2160481 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

knockoutjs -- if 绑定

 
阅读更多
参考: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 绑定参数:
  • 用来计算的表达式。如果表达式的值为true(或者类似true的值),那么包含的html内容就会被输出到DOM树中,包含html内容中的任何data-bind属性都会被应用。如果表达式的值为false,那么包含的html内容就会被从DOM树中移除,同时包含的任何data-bind属性也不会被应用。
  • 表达式包含观察者变量。如果表达式包含任何一个观察者变量,那么在变量值发生变化时,表达式都会被重新计算。对应的html内容就会根据计算的结果动态地加到DOM树中,或者从DOM树中移除。当增加部分的html内容中包含data-bind属性,那么这些绑定都会被启用

没有容器元素下使用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会理解这个虚拟元素的语法并正确处理
分享到:
评论

相关推荐

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

    总结来说,`if`和`ifnot`绑定在KnockoutJS中是用于动态控制用户界面的重要工具。它们可以根据数据模型的状态创建或移除DOM元素,使得界面更加灵活且响应数据的变化。理解并熟练运用这两个绑定,能够帮助开发者构建出...

    ko knockoutjs动态属性绑定技巧应用

    总结来说,动态属性绑定技巧在Knockout.js中的应用,主要涉及扩展knockout的核心功能,以便根据运行时的需求动态地添加和绑定属性。这一技巧对于构建高度动态和可扩展的Web应用程序至关重要,能够帮助开发者更好地...

    KnockoutJS by Example源码

    源码中会展示如何使用`text`, `html`, `value`, `if`, `foreach`等不同的数据绑定指令来动态更新视图。 2. ** observables**:在KnockoutJS中,`observables`是可观察的值,当其改变时,会自动更新与其相关的视图。...

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

    **KnockoutJS 3.X API 的数据控制流——with绑定** `with`绑定是KnockoutJS中用于改变视图模型上下文的一种关键机制,它允许你在模板中创建一个局部作用域,使得模板内的所有元素都绑定到这个新的上下文。这在处理...

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

    foreach 绑定不仅限于单独使用,它还可以和其他控制流绑定一起使用,例如 if 和 with,以实现更复杂的动态数据交互和视图更新。这为开发者提供了灵活性,可以根据数据的变化来显示或隐藏某些内容,或者改变绑定的上...

    KnockoutJS 3.X API 第四章之click绑定

    在KnockoutJS框架中,click绑定是用来响应DOM元素点击事件的一种机制,它允许开发者在用户与界面交互时执行JavaScript函数。KnockoutJS是一个轻量级的JavaScript库,用于构建可扩展的富数据应用程序。本文将详细介绍...

    knockoutjs模板实现树形结构列表

    Vue中可以使用`v-if`或`v-show`来控制元素的显示,而KnockoutJS对应的是`if`或`visible`绑定。此外,Vue的模板语法更接近HTML,而KnockoutJS的模板更倾向于内联JavaScript表达式。 总结来说,这个例子展示了如何...

    Knockoutjs让你利用JavaScript更容易创造丰富响应式的UI

    - **数据绑定指令**:如`text`, `if`, `foreach`, `click`等,覆盖了常见的交互需求。 - **自定义绑定器**:允许开发者扩展框架功能,创建自己的数据绑定逻辑。 - **模板引擎**:支持多种模板语法,如`&lt;script&gt;`标签...

    knockout-blog:KnockoutJS 入门

    KnockoutJS 提供了条件渲染的绑定,如 `if` 和 `ifnot`,以及循环渲染的 `foreach` 绑定。这允许你根据数据动态地显示或隐藏DOM元素,或者遍历数组并为每个元素创建一个新的视图。 ### 8. 验证 虽然 KnockoutJS ...

    Colorinator在线颜色编辑器源码.rar

    最后,通过KnockoutJS ApplyBindings 方法连接ViewModel和View,在这个方法中Object 模式被作为参数实际上创建绑定。 在我看来,KnockoutJS仅仅是一个外壳、一个框架,这些只是JS 框架的一些延伸。KnockoutJS 拥有...

    knockout-contrib-dctl:用于 Knockoutjs 的附加组件模板加载器

    它通过数据绑定和依赖追踪机制简化了DOM操作,使得开发者能更专注于业务逻辑而不是DOM操作。本文将深入探讨用于KnockoutJS的**knockout-contrib-dctl**,这是一个特殊的组件模板加载器,能够同步加载组件模板。 **...

    knockout仿京东商城筛选项

    8. **性能优化**:对于大型数据集,可能需要使用KnockoutJS的`foreach`绑定的`if`或`visible`子句来控制DOM的生成,避免一次性渲染大量元素导致的性能问题。 9. **代码组织**:良好的代码组织可以帮助提高项目的...

    前端项目-knockout-validation.zip

    这个插件是KnockoutJS生态系统的一部分,增强了框架的数据绑定和验证能力。 ### KnockoutJS简介 KnockoutJS是一种轻量级、易于学习的JavaScript库,用于构建动态和交互式的Web界面。它的核心功能包括数据绑定、依赖...

    knockoutJS:使用淘汰组件的网站

    然后,可以使用各种数据绑定指令(如if、foreach、with等)来控制元素的呈现逻辑。 **8. 过时的挑战** 尽管KnockoutJS在动态UI更新方面表现出色,但它缺乏现代框架的某些特性,如路由、状态管理、组件化等。此外,...

    使用HTML5,CSS3和JavaScript的随机数猜游戏(knockoutjs)

    在"Random Number Guessing Game"中,KnockoutJS可能被用来管理游戏的状态(如当前的随机数、用户已尝试的次数、是否猜中等),并通过数据绑定实时更新界面。 此外,"Random-Number-Guessing-Game-using-...

Global site tag (gtag.js) - Google Analytics