Ember.computed.alias和Ember.binding有什么区别?

Nic*_*gaz 17 ember.js

在Ember中,将属性定义为另一个属性(或另一个对象的属性)的计算别名Ember.computed.alias('otherProperty')似乎与将其定义为使用该属性的绑定具有基本相同的结果propertyNameBinding: 'otherProperty'.

我查看了源代码和文档,但我找不到任何理由为什么一个优先于另一个.显然模板使用绑定,这很好,但对于例如控制器中的属性,或者在视图上引用控制器的属性,是否有区别?

Chr*_*sey 14

可以在extend()上覆盖别名,完全消除与其他键的关系.

一个简短的例子:我有一类与时间相关的函数和类,这些类同时具有unit属性(对于Day,Minute等)和precision属性.通常这些在功能上是相同的.在一两个班级中他们分道扬.. Ember.computed.alias允许precisionunit大多数情况下使用别名,但可以根据需要使用自己的值覆盖.

请注意,create()将使用别名setter,而不是覆盖.

此外,在路径中设置带有空对象的别名可能会爆炸,而如果路径不在任何地方,则绑定将无法同步.

根据*Binding语法的软弃用,请参阅下面的morgoth评论

  • 软件不赞成使用`Ember.computed.alias`https://github.com/emberjs/ember.js/issues/1164#issuecomment-23200023 (8认同)