如何让Object中的方法返回具有动态值的对象?

时间:2014-08-30 21:56:14

标签: javascript ember.js

在我的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')))

1 个答案:

答案 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()))