1 min read

Ember.js 模板添加 HTML5 属性

Note:本文基于 Ember.js 1.4.0

最近开发一个 Chrome 扩展,因为基于 Chrome 浏览器,所以就放心大胆地用各种新技术,比如1

<form>
  <label for=email>邮箱:</label>
  <input type=email required=required title=请输入邮箱地址 name=email placeholder=请输入邮箱地址>
  <input type=submit>
</form>

required 2是 HTML5 增加的元素属性,应用于表单中 input、select、textarea 元素,表示它们是必须项,用户需要填写才能提交。如果提交空内容,浏览器就会显示原生的错误消息,比如:请填写此字段。

在 Ember.js 下,上面的 Email 输入框代码会是这样写的3

{{view Ember.TextField name='email' valueBinding='email' type='email' placeholder='请输入邮箱地址' required='required' title='请输入邮箱地址'}}

检查 Ember.js 生成的 HTML 代码:

<input id="ember218" class="ember-view ember-text-field" placeholder="请输入邮箱地址" name="email" type="email">

可以看到,requiredtitle 两个属性被抛掉,这是因为 Ember.TextField 原生支持的 HTML 属性有限。但 HTML5 里,像 data-* 这样的属性是经常出现的,required 也很常见。不能因为 Ember.js 原生不支持这样的属性就不用。

Ember.js 提供了一个非常简单的 reopen 方法4,直接扩展 Ember.TextField 类的实例方法和实例属性:

Ember.TextField.reopen({
  attributeBindings: ['required', 'title']
});

再检查 Ember.js 生成的 HTML 代码:

<input id="ember219" class="ember-view ember-text-field" placeholder="请输入邮箱地址" name="email" required="required" title="请输入邮箱地址" type="email">

已经成功地给 Ember.js 模板加入 HTML5 属性了。

报告问题 修订