Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

text 绑定 #3

Open
wikieswan opened this issue Apr 15, 2015 · 0 comments
Open

text 绑定 #3

wikieswan opened this issue Apr 15, 2015 · 0 comments
Labels

Comments

@wikieswan
Copy link
Member

text 绑定

作用

text 绑定让DOM元素显示参数的值。对于 span 、 em 这些常用来表示文本的标签起作用,但是你想绑定在其他标签上也是可以的。

示例

Today's message is: <span data-bind="text: myMessage"></span>
   var viewModel = {
        myMessage: ko.observable() // Initially blank
    };
    viewModel.myMessage("Hello, world!"); // Text appears
    ko.applyBindings(viewModel);

参数说明

主要参数

Knockout 用参数的值设置DOM元素的text属性值;DOM元素原先的值会被复写。

如果参数是一个observable变量,那么一旦参数的值发生变化,页面上绑定的值都会立即改变;如果不是,那么只会在第一次绑定的时候改变页面元素的文本值,页面上的值之后就不会再被改变。

如果参数的类型不是number或者string(e.g., 对象或者数组),那么页面上展示的文本是对象到字符串等效转化的值,相当于yourParameter.toString()

其他参数

注意1:使用函数和表达式获取文本的值

如果想通过程序方式确定文本的值,那么需要用到可计算的observable,用可以返回文本的函数名作为参数。

e.g.

 The item is <span data-bind="text: priceRating"></span> today.
var viewModel = {
        price: ko.observable(24.95)
    };
    viewModel.priceRating = ko.pureComputed(function() {
        return this.price() > 50 ? "expensive" : "affordable";
    }, viewModel);
    ko.applyBindings(viewModel);

那么文本的值就会根据price 的变化而取 “expensive” 或者 “affordable” 。

另外,如果像下面那样只做简单的逻辑处理的话,是不需要创建可计算的observable的函数的。你可以传递任何的javascript表达式作为数据绑定。e.g.

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

注意2 HTML编码

既然绑定是用文本节点的值来设置页面上文本的值的,那么为了安全起见,设置任何字符串值的时候都应该避免HTML或者script注入。

e.g.

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

这段代码不会在页面上渲染出斜体文本,(即html标签不会被浏览器解析渲染),而是在页面上直接原样显示。

如果你要在数据模型中设置html代码,请看下文关于html绑定的说明。

注意3 不适用html元素完成文本绑定

有时候,你想完成数据绑定而不引入额外的HTML元素。例如,在option标签中引入额外的元素是不可以的,像下面的代码是不会生效的:

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

为了处理这种情况,需要引入无容器的语法 -- 文本注释标签

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

<!--ko--><!--/ko-->表示注释区域的开始和结束。用这种方式定义了“虚拟元素”,里面包含了标记绑定。Knockout 会理解这种虚拟元素语法,并且会完成数据绑定。

注意4 IE 6下怪异的空格

IE 6会忽略紧跟在span标签后面的空格。例如

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

在IE 6下 to our web site前面的空格不会显示出来,解决这个问题的办法是在span标签里面加上 例如

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

在新版本的IE浏览器或者其他浏览器没有这个问题。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant