目的

Visible绑定通过绑定一个值来确定DOM元素显示或隐藏

示例

  1. <div data-bind="visible: shouldShowMessage">
  2. You will see this message only when "shouldShowMessage" holds a true value.
  3. </div>
  4. <script type="text/javascript">
  5. var viewModel = {
  6. shouldShowMessage: ko.observable(true) // Message initially visible
  7. };
  8. viewModel.shouldShowMessage(false); // ... now it's hidden
  9. viewModel.shouldShowMessage(true); // ... now it's visible again
  10. </script>

参数

主参数

当参数设置为一个假值(例如bool型值false、整型值0、null或者undefined)时,该绑定会设置yourElement.style.display为 none,让元素隐藏。它的优先级高于任何你在CSS中定义的隐藏样式。

当参数设置为一个真值(例如bool型值true、不等于null、Object对象或数组)时,该绑定会去掉yourElement.style.display值,让元素显示。

注意,任何你在CSS中定义的样式会立即应用生效。

如果参数是一个observable值,visible绑定使得元素的visible状态随着参数值的变化而变化。如果参数不是observable值,visible绑定仅仅会设置元素visible状态一次,以后不会再更新。

其他参数

注:使用函数或表达式来控制元素显示隐藏

你可以选择使用JavaScript函数或者表达式作为参数值。这样的话,KO将会运行你的函数或者表达式,返回的结果来控制元素显示或者隐藏。

例如:

  1. <div data-bind="visible: myValues().length > 0">
  2. You will see this message only when 'myValues' has at least one member.
  3. </div>
  4. <script type="text/javascript">
  5. var viewModel = {
  6. myValues: ko.observableArray([]) // Initially empty, so message hidden
  7. };
  8. viewModel.myValues.push("some value"); // Now visible
  9. </script>

目的

Text绑定主要是让DOM元素显示参数值。

通常情况下,该绑定在<span>和<em>这样的元素上非常有用,而实际上你可以绑定任何元素。

示例

  1. Today's message is: <span data-bind="text: myMessage"></span>
  2. <script type="text/javascript">
  3. var viewModel = {
  4. myMessage: ko.observable() // Initially blank
  5. };
  6. viewModel.myMessage("Hello, world!"); // Text appears
  7. </script>

参数

主要参数

Knockout将参数值设置为元素内容。元素之前的内容将会被覆盖。

如果参数是一个observable值,text绑定将会在值变化时更新元素text内容。如果参数不是observable值,text绑定仅仅会设置元素内容一次,以后不会再更新。

如果你传入的不是一个值或者一个字符串(比如:你传入一个对象或者数组)那么显示的文本将是yourParameter.toString()的结果。

其他参数

注意事项

注1:使用函数或表达式来决定text值

如果你想text值可编程化,一种选择是创建计算属性,然后在运算函数中编码决定text中显示什么。

例如:

  1. The item is <span data-bind="text: priceRating"></span> today.
  2. <script type="text/javascript">
  3. var viewModel = {
  4. price: ko.observable(24.95)
  5. };
  6. viewModel.priceRating = ko.computed(function() {
  7. return this.price() > 50 ? "expensive" : "affordable";
  8. }, viewModel);
  9. </script>

现在,text值将会在“expensive”和“affordable”之间选择,而这主要取决于“price ”的变化。
然而,假如你按照示例中的方式你则不需要创建计算属性。你可以传入任意的JavaScript表达式进行text绑定。

例如:

  1. The item is <span data-bind="text: price() > 50 ? 'expensive' : 'affordable'"></span> today.

注2:关于HTML编码

由于text绑定是利用元素的text节点属性来设置文本值,你可以很安全的设置任何内容而不用担心HTML和脚本注入风险。例如,如果你输入以下内容:

  1. viewModel.myMessage("<i>Hello, world!</i>");

它将不会显示一个斜体文本,而是按原样进行标签输出。

如果你想设置一个HTML内容,你可以参数HTML绑定。

注3:使用“text”而没有一个容器元素

有时你可能需要使用Knockout在不使用多余的元素的情况下通过text绑定来设置文本内容。例如,在option元素中是不允许存在其他元素的,所以下面的绑定是无法正常工作的。

  1. <select data-bind="foreach: items">
  2. <option>Item <span data-bind="text: name"></span></option>
  3. </select>

为了解决这个问题,你可以使用容器语法,它基于一个注释元素。

  1. <select data-bind="foreach: items">
  2. <option>Item <!--ko text: name--><!--/ko--></option>
  3. </select>

<!--ko--> 和<!--/ko--> 注释标记作为起始和结束符,定义一个“虚拟元素”,里面包含了标记,Knockout能够识别这种虚拟元素语法和绑定作为你需要的容器元素而存在。

注4:一个关于IE6 白空格

IE6有一个奇怪的现象,如果span有空格的话,它会变成一个空span,如果你编写以下代码,Knockout不会起任何作用。

  1. Welcome, <span data-bind="text: userName"></span> to our web site.

IE6不会显示span中间的那个空格,如果你想避免这个问题,你可以在<span>中输入任意内容。比如:

  1. Welcome, <span data-bind="text: userName">&nbsp;</span> to our web site.

其他浏览器或者版本较新的IE浏览器不会出现这个问题。

=========================================================

目的

Html绑定会让关联的DOM元素显示你参数指定的HTML内容。

通常当你的ViewModel中值是HTML标记字符串时,使用html绑定来render是非常有用的。

示例

  1. <div data-bind="html: details"></div>
  2. <script type="text/javascript">
  3. var viewModel = {
  4. details: ko.observable() // Initially blank
  5. };
  6. viewModel.details("<em>For further details, view the report <a href='report.html'>here</a>.</em>"); // HTML content appears
  7. </script>

参数

主要参数

KO会使用你的参数值来设置元素的innerHTML 属性,任何之前的内容将会被重写掉。

如果参数是一个监控属性值,当这个监控属性值发生变化的时候html绑定会更新绑定元素的内容。如果这个参数是非监控属性值,那么html仅绑定元素内容一次并且以后不再去更新它。

如果你传入的参数内容不是字符串或者数字(例如对象或者数组),那么innerHTML 将会等价于yourParameter.toString()。

其他参数

无。

注意:关于HTML编码

由于HTML绑定使用的是innerHTML来设置元素内容,那么你需要注意不要使用不安全的HTML内容,因为这有可能引入脚本注入攻击的风险,如果你不确定它是否安全(比如显示用户输入的内容),请使用text绑定,因为text绑定只设置元素的text内容innerText。

==================================================

目的

Css绑定主要是给DOM元素对象添加或移除一个或多个css class类名。这非常有用,比如当值变成负数的时候用红色高亮显示。

注意:如果你不想应用CSS class,而是采用style属性的话,请采用style绑定。

静态classes示例

  1. <div data-bind="css: { profitWarning: currentProfit() < 0 }">
  2. Profit Information
  3. </div>
  4. <script type="text/javascript">
  5. var viewModel = {
  6. currentProfit: ko.observable(150000) // Positive value, so initially we don't apply the "profitWarning" class
  7. };
  8. viewModel.currentProfit(-50); // Causes the "profitWarning" class to be applied
  9. </script>

当currentProfit 的值小于0的时候将会给元素绑定上profitWarning 样式,当值大于0时移除样式。

动态classes示例

  1. <div data-bind="css: profitStatus">
  2. Profit Information
  3. </div>
  4. <script type="text/javascript">
  5. var viewModel = {
  6. currentProfit: ko.observable(150000)
  7. };
  8. // Evalutes to a positive value, so initially we apply the "profitPositive" class
  9. viewModel.profitStatus = ko.computed(function() {
  10. return this.currentProfit() < 0 ? "profitWarning" : "profitPositive";
  11. }, viewModel);
  12. // Causes the "profitPositive" class to be removed and "profitWarning" class to be added
  13. viewModel.currentProfit(-50);
  14. </script>

当currentProfit 值是positive的时候将会给元素绑定上profitWarning 样式,其他情况下将会绑定profitWarning 样式。

参数

主要参数

如果你使用静态的CSS class名称,你可以传递一个属性名是CSS class名,值是true或者false的JavaScript对象来决定DOM元素是否应用class。

你可以一次使用多个CSS class。比如,你的view model含有一个属性isSevere

  1. <div data-bind="css: { profitWarning: currentProfit() < 0, majorHighlight: isSevere }">

你可以在同一个条件下设置多个CSS class,名称用引号引起来。比如:

  1. <div data-bind="css: { profitWarning: currentProfit() < 0, 'major highlight': isSevere }">

非bool值会被解析成bool值,比如:0或null会解析成false,像21、 non-null这样的对象会解析成true。

如果你的参数是observable 值,此绑定会在observable 值发生变化的之后添加或移除Css class。如果参数不是observable 值,那么CSS class只会添加或移除一次,以后不再变化。

如果你想使用动态Css class名称,你可以传递一个与Css class名称对应的字符串给你要添加的元素。如果参数是observable 值,绑定会移除元素之前添加的所有css class,并将对应的observable 新值添加给元素。
通常,你可以使用任意JavaScript表达式或者函数作为参数值。KO会自动执行它们通过返回的值来确定元素待添加或移除的Css class。

附加参数

注意:应用的Css class名称不能是不合法的JavaScript命名

如果你要添加的Css class名my-class,你不能这样写

  1. <div data-bind="css: { my-class: someValue }">...</div>

因为my-class不是一个合法的JavaScript命名,解决方案是:在名称两边加上引号作为字符串使用,这样的命名是合法的JavaScript对象。例如:

    1. <div data-bind="css: { 'my-class': someValue }">...</div>

Knockout开发中文API系列4–绑定关键字的更多相关文章

  1. Knockout开发中文API系列4–监控属性数组

    PS:这个翻译系列好久都没有更新了,实在是不应该,一方面是由于时间不多,另一方面也由于自身惰性太大,从今天起接着更新,会在最近的一月内把这个系列中文API文档翻译完整. 如果你想侦测并响应一个对象的变 ...

  2. Knockout开发中文API系列3–使用计算属性

    计算属性 如果你已经有了一个监控属性 firstName和lastName,如果你想显示全名该怎么做呢?这个时候你就可以通过计算属性来实现,这个方法依赖于一个或多个监控属性,如果任何依赖对象发生改变他 ...

  3. Knockout开发中文API系列1

    从本节开始介绍关于KnockoutJs相关的内容,本节主要介绍knockoutjs一些重要特性与优点,以及它与Jquery等框架库之间的区别. 1.Knockout.js是什么? Knockout是一 ...

  4. Knockout开发中文API系列2–创建数据模型和监控属性

    Observables,这个词的翻译来自汤姆大叔,对于部分翻译不是很准确的,欢迎大家留言,以得到更好的翻译. Knockout是建立在以下3个核心功能之上的: 1.    属性监控与依赖跟踪 2.   ...

  5. flask开发restful api系列(8)-再谈项目结构

    上一章,我们讲到,怎么用蓝图建造一个好的项目,今天我们继续深入.上一章中,我们所有的接口都写在view.py中,如果几十个,还稍微好管理一点,假如上百个,上千个,怎么找?所有接口堆在一起就显得杂乱无章 ...

  6. flask开发restful api系列(1)

    在此之前,向大家说明的是,我们整个框架用的是flask + sqlalchemy + redis.如果没有开发过web,还是先去学习一下,这边只是介绍如果从开发web转换到开发移动端.如果flask还 ...

  7. flask开发restful api系列(7)-蓝图与项目结构

    如果有几个原因可以让你爱上flask这个极其灵活的库,我想蓝图绝对应该算上一个,部署蓝图以后,你会发现整个程序结构非常清晰,模块之间相互不影响.蓝图对restful api的最明显效果就是版本控制:而 ...

  8. flask开发restful api系列(6)-配置文件

    任何一个好的程序,配置文件必不可少,而且非常重要.配置文件里存储了连接数据库,redis的用户密码,不允许有任何闪失.要有灵活性,用户可以自己配置:生产环境和开发环境要分开,最好能简单的修改一个东西, ...

  9. flask开发restful api系列(5)-短信验证码

    我们现在开发app,注册用户的时候,不再像web一样,发送到个人邮箱了,毕竟个人邮箱在移动端填写验证都很麻烦,一般都采用短信验证码的方式.今天我们就讲讲这方面的内容. 首先,先找一个平台吧.我们公司找 ...

随机推荐

  1. Debian本地镜像长时间不更新

    一.执行apt-get update 使用一个长期未更新的本地源,得到错误的提示: Release file for ... is expired. Updates for this reposito ...

  2. [转]Java 变量和常量

    变量和常量 在程序中存在大量的数据来代表程序的状态,其中有些数据在程序的运行过程中值会发生改变,有些数据在程序运行过程中值不能发生改变,这些数据在程序中分别被叫做变量和常量. 在实际的程序中,可以根据 ...

  3. php分享三十一:编程中的一些特殊写法

    1:for for ( ; $i < $accept_l ; $i++ ) for($i = 0, $num = count($array); $i < $num; $i++) for ( ...

  4. 快学Scala习题解答—第四章 映射和元组

    4 映射和元组  4.1 设置一个映射,当中包括你想要的一些装备,以及它们的价格.然后构建还有一个映射.採用同一组键,可是价格上打9折 映射的简单操作  ,"gun"->18 ...

  5. Oracle 11G 安装图文教程

    Oracle 11G 下载地址:http://www.oracle.com/technetwork/cn/database/enterprise-edition/downloads/index.htm ...

  6. Atitti 住房部建设指南

    Atitti 住房部建设指南 1. 住房部建设的重要意义2 2. 房屋选址::首要核心要素,环境环境环境!!!2 2.1. 价格要素与地段..2 2.2. 与工作地距离,一般是半小时到一个半小时为好3 ...

  7. [Windows Azure] Building worker role A (email scheduler) for the Windows Azure Email Service application - 4 of 5.

    Building worker role A (email scheduler) for the Windows Azure Email Service application - 4 of 5. T ...

  8. 每日英语:Boost Your Balance; Avoid Falls

    If you find yourself needing to sit down to take off your shoes, it might be time to start paying at ...

  9. iOS 10.3.3 更新背后的故事

    iOS 10.3.3 更新背后的故事 TLDR:赶紧升级! 苹果最近提示大家将系统升级到 iOS 10.3.3,并且描述这个更新的内容是:修复和改进安全性. iOS 10.3.3 includes b ...

  10. iOS-图片浏览器(字典和plist文件的使用)

    // //  ViewController.m //  19-图片浏览器 // //  Created by hongqiangli on 2017/7/31. //  Copyright © 201 ...