返回介绍

模板 - 绑定元素属性

发布于 2020-02-21 15:48:02 字数 3252 浏览 1086 评论 0 收藏 0

英文原文:http://emberjs.com/guides/templates/binding-element-attributes/

除了普通文本,你可能也希望在模板中包含可以将其属性绑定到控制器的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,且不需要在视图中指定属性名称。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文