灰烬引用属性或吸气剂

时间:2019-03-05 15:41:28

标签: ember.js

对于何时引用属性以及何时使用getter以及原因,我有些困惑。

例如,控制器可能为最新的location属性注入服务:

export default Controller.extend({
    maps        : service(),

    location    : computed('maps.location', function() {
        return this.get('maps').getLocation()
    }),

但是服务中的getLocation是一个简单的获取器:

getLocation() {
    return this.get('location')
},

为什么不使用其中之一:

this.get('maps').location
this.get('maps').get('location')
this.get('maps.location')

并避免必须为每个参数编写吸气剂?本着约定胜于配置的精神,编写吸气剂是否有点多余?

简单地说,在查看示例和教程时,我会看到不同的模式:

  • service.property
  • service.get('property')
  • service.getProperty()

什么是正确的?何时何地?


在线教程和论坛帖子在Ember版本目标方面有很大不同。通常甚至是2.x分支。我目前正在使用3.8。

1 个答案:

答案 0 :(得分:2)

就像提到的@NullVoxPopuli一样,它取决于您的余烬版本,但是我要假设您使用的是> 3或最新版本。

我的第一个注意事项是,我几乎完全专注于导入和使用the get functiondefined by the documentation@Pavol in another similar post的描述非常好,让您不知道是否是否正在尝试获取纯JavaScript对象或Ember.Object的属性。

要更直接地回答,我不确定您所指的服务是要完成什么,但是根据您发布的内容,您可以在控制器中调用get(this, 'maps.location'),并删除或忽略该服务方法。

Ember文档还指出,只要您知道要从注入的服务中使用的方法,就可以直接在当前Ember.Object上调用它,而无需使用get;。像这样:

export default Controller.extend({
    maps: service(),

    location: computed('maps.location', function() {
        return this.maps.getLocation()
    })...

您可能想使用get的原因是,如果不确定是否要计算访问的属性。

  

在计算属性上调用get时,将调用该函数,并且将返回返回值,而不是返回函数本身。