Ember 1.5.0和1.6 Beta发布


1.5中得新特性

Handlebars记录原生值

本特性允许在模板中log原生数据类型的值(字符串、数字等)

1
{{log "**LOOKEY HERE**"}}

新测试助手

路由助手

添加了一些新的测试助手,以便可以方便的断言应用的路由所处的状态(例如点击一个链接后重定向到一个指定的路由)。

新测试助手包括:currentRouteNamecurrentPathcurrentURL

触发事件助手

triggerEvent助手可以用于在一个元素上触发任意的事件。

1
triggerEvent('#some-element-id', 'dblclick');

Ember.computed.readOnly

通常当使用Ember.computed.oneWay时,需要使用readOnly来确保数据存在备份。

1
2
3
4
5
// prior to Ember.computed.readOnly you would have to do the following:
Ember.computed.oneWay('foo').readOnly()

// in 1.5 you can use the following for the same result:
Ember.computed.readOnly('foo')

Ember.isBlank

用于检查一个特定的对象为空,或者为一个空的字符串:

1
2
3
4
5
6
7
8
9
10
11
Ember.isBlank();                // true
Ember.isBlank(null);            // true
Ember.isBlank(undefined);       // true
Ember.isBlank('');              // true
Ember.isBlank([]);              // true
Ember.isBlank('\n\t');          // true
Ember.isBlank('  ');            // true
Ember.isBlank({});              // false
Ember.isBlank('\n\t Hello');    // false
Ember.isBlank('Hello world');   // false
Ember.isBlank([1,2,3]);         // false

渴望型更新URL

之前,地址栏中的URL只会在过渡的最后才会被更新。目前只要过渡没有在同一个运行循环中被取消/重定向,那么URL会被立即更新,这样99%的用户体验问题得到改善。

自动定位

为应用的Routerlocation属性添加一个auto选项。

1
2
3
App.Router.reopen({
  location: 'auto'
});

如果使用了改选项,那么Ember会更具浏览器的支持按照:history,hash和none的顺序来选择最合适的定位方法。

对于被只支持hash改变的浏览器的清理pushState路径,会被重定向到与hash等价的方式,反之亦然。因此过渡保持了一致性。

绑定操作查找

{{action}}助手可以使用无引号的参数,并在事件被触发时,在对应的操作目标对象的属性中区找这个参数绑定的属性。这样可以使用动态的操作名(通过属性获取操作的名称)。

Routes继承模型

Ember路由及叶子节点资源(没有嵌套的路由)将继承父路由的模型。

如下下例所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
App.Router.map(function(){
  this.resource('post', function(){
    this.route('edit');
  });
});

App.PostRoute = Ember.Route.extend({
  model: function(){
    return {title: 'ZOMG', text: 'AWESOME'};
  }
});

App.PostEditRoute = Ember.Route.extend({
  model: function(){
    return this.modelFor('post');
  }
});

在1.5版本中,不在需要为PostEditRoute定义model钩子,默认会使用父路由的model

其他值得注意的更新

当下的_super(破坏性Bug修复)

之前版本的Ember.js使用了对于织入不是那么安全的super机制。如果一个指定函数名被多次调用_super,并且没有终止函数,那么就会遇到死循环。#3523有深入的讨论。

1.5中得解决方案修复了这个问题(#3683),这也破坏了使用_super不一致。例如:

1
2
3
  doIt: function(){
    Ember.run.once(this, this._super);
  }

不在支持使用_super,查看实例jsbin。 如果个造成了影响,那么可以去#4632参与讨论。

Handlebars {{each}} 助手检查标签

有些情况,浏览器会添加固定的标签,可能改变Metamorph标签的递属关系。这个问题将成在开发人员忘记在一个表格中添加TBODY的情况。这使得框架无法更新和清理底层DOM元素。

非生产环境构建中添加了一个断言,用于指出Metamorph的开始和结尾标签父元素不同的情况。这通常是在<table>中使用{{each}}时没有指定<tbody>导致的。

JSBin展示了这个断言:

1
2
3
4
5
<table>
  {{#each}}
    <tr></tr>
  {{/each}}
</table>

解决办法就是添加<tbody>JSBin

1
2
3
4
5
6
7
<table>
  <tbody>
    {{#each}}
      <tr></tr>
    {{/each}}
  </tbody>
</table>

其他改进

一如既往,本次发布还修改了许多之前版本存在的Bugs,对一部分功能也作出了一些改进。详细的内容可以查看CHANGELOG:


博客评论基于Disqus