簡體   English   中英

如何在對象中使用方法返回具有動態值的對象?

[英]How can I have a method in an Object return an object with a dynamic value?

在我的Ember應用程序中,我正在嘗試為Google Maps服務創建包裝。 為了設置地圖的參數,我必須創建一個包含所有參數的對象。 我正在嘗試在mapOptions屬性中執行此操作。 理想情況下,我想在對象內部使用小的輔助方法來計算Google Maps選項對象的值,但是當我嘗試設置對象的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')))

@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()))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM