Ember 1.5.0和1.6 Beta发布
作者: Robert Jackson –
1.5中得新特性
Handlebars记录原生值
本特性允许在模板中log
原生数据类型的值(字符串、数字等)
1 |
{{log "**LOOKEY HERE**"}}
|
新测试助手
路由助手
添加了一些新的测试助手,以便可以方便的断言应用的路由所处的状态(例如点击一个链接后重定向到一个指定的路由)。
新测试助手包括:currentRouteName
,currentPath
和currentURL
。
触发事件助手
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%的用户体验问题得到改善。
自动定位
为应用的Router
的location
属性添加一个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展示了这个断言:
解决办法就是添加<tbody>
(JSBin)
其他改进
一如既往,本次发布还修改了许多之前版本存在的Bugs,对一部分功能也作出了一些改进。详细的内容可以查看CHANGELOG:
博客评论基于Disqus