入门指南 获取Ember 概念 对象模型 应用 模板 路由 组件 控制器 模型 视图 枚举 测式 配置Ember.js COOKBOOK 理解Ember.js

发布于 2015-08-18 16:34:51 | 335 次阅读 | 评论: 0 | 来源: 网络整理

除了普通文本,你可能也希望在模板中包含可以将其属性绑定到控制器的HTML元素。

例如,想象一下你的控制器中包含这样一个属性,它包含指向一幅图像的URL地址:

 
1
2
3
<div id="logo">
  <img {{bind-attr src=logoUrl}} alt="Logo">
</div>
 

上面代码将生成如下的HTML代码:

 
1
2
3
<div id="logo">
  <img src="http://www.example.com/images/logo.png" alt="Logo">
</div>
 

如果你使用{{bind-attr}}绑定一个布尔类型的属性, 它将增加或移除指定属性。例如下面的模板:

 
1
<input type="checkbox" {{bind-attr disabled=isAdministrator}}>
 

如果isAdministrator的值是trueHandlebars将生成如下所示的HTML元素:

 
1
<input type="checkbox" disabled>
 

否则,如果isAdministratorfalse,生成的HTML元素如下:

 
1
<input type="checkbox">
 

添加数据属性

缺省情况下,视图助手不接受数据属性。例如:

 
1
2
3
{{#link-to "photos" data-toggle="dropdown"}}Photos{{/link-to}}

{{input type="text" data-toggle="tooltip" data-placement="bottom" title="Name"}}
 

渲染出如下所示HTML:

 
1
2
3
<a id="ember239" class="ember-view" href="#/photos">Photos</a>

<input id="ember257" class="ember-view ember-text-field" type="text">
 

启用数据属性支持有两种方法。第一种是在视图中添加一个属性绑定,例如Ember.LinkView或者Ember.TextField的特殊属性:

 
1
2
3
4
5
6
7
Ember.LinkView.reopen({
  attributeBindings: ['data-toggle']
});

Ember.TextField.reopen({
  attributeBindings: ['data-toggle', 'data-placement']
});
 

那么之前的handlebars代码渲染出如下所示的HTML:

 
1
2
3
4
<a id="ember240" class="ember-view" href="#/photos" data-toggle="dropdown">Photos</a>

<input id="ember259" class="ember-view ember-text-field" 
       type="text" data-toggle="tooltip" data-placement="bottom">
 

此外也可以在视图基类上自动绑定数据属性,如下所示:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
Ember.View.reopen({
  init: function() {
    this._super();
    var self = this;

    // bind attributes beginning with 'data-'
    Em.keys(this).forEach(function(key) {
      if (key.substr(0, 5) === 'data-') {
        self.get('attributeBindings').pushObject(key);
      }
    });
  }
});
 

现在可以添加任意的data-attributes,且不需要在视图中指定属性名称。

最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务