在我的Ember应用中,我试图为Google地图服务创建一个包装器。为了设置地图的参数,我必须创建一个包含所有参数的对象。我试图在mapOptions属性中执行此操作。理想情况下,我希望在对象内部使用小辅助方法来计算Google Maps选项对象的值,但是我得到了一个" Undefined不是一个函数"我尝试设置对象的center属性时出错,我创建了MapBackgroundGenerator对象中的对象。我假设它有一个范围问题,但我不确定如何在我的对象创建方法中访问我的帮助方法。
App.MapBackgroundGenerator = Ember.Object.extend
placesService: null
placeId: null
mapContainer: null
setMapLocationFrom: (placeId) ->
console.log(placeId)
@get('placesService').getDetails(placeId: placeId, (place, status) =>
console.log(place)
# @set('placeLocation', place.geometry.location)
return place.geometry.location
)
placeLocation: 1111
# ).observes('placeId')
mapOptions: # ()->
# console.log(@get('placeLocation'))
# return {
zoom: 8
center: @get('placeLocation')
# }
# mapHeight: null
# mapWidth: null
map: null
init: ()->
console.log('init')
@._super
@set('mapContainer', @get('mapContainer')[0])
@set('placesService',
new google.maps.places.PlacesService(@get('mapContainer')))
console.log(@get('mapOptions'))
@set('map',
new google.maps.Map(@get('mapContainer'), @get('mapOptions')))
答案 0 :(得分:1)
@get
必须在实例的上下文中执行。在这里,您将在窗口的上下文中执行它。
您可以将mapOptions更改为计算属性:
mapOptions: function(){
return {
zoom: 8
center: this.get('placeLocation')
}
}.property('placeLocation')
或者如果你只是想让它成为一种方法,你就不会使用getter
,你只需要调用func
mapOptions: function(){
return {
zoom: 8
center: this.get('placeLocation')
}
}
@set('map', new google.maps.Map(@get('mapContainer'), @mapOptions()))