对于何时引用属性以及何时使用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。
答案 0 :(得分:2)
就像提到的@NullVoxPopuli一样,它取决于您的余烬版本,但是我要假设您使用的是> 3
或最新版本。
我的第一个注意事项是,我几乎完全专注于导入和使用the get
function,defined 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
时,将调用该函数,并且将返回返回值,而不是返回函数本身。