0

私はビューを持っています

class FoursquareSearch.Views.Origin extends Backbone.View

events:
    'change [name=origin]': 'setOrigin'
    'click [name=geolocate]' : 'geolocate'

  geolocate: ->
    navigator.geolocation.getCurrentPosition(@handle)

  handle: (response) ->
    @model.set(coords: response)  

デバイスの場所を特定し、応答でモデルを設定しようとしています。しかし、私は得る

Uncaught TypeError: Cannot call method 'set' of undefined 

奇妙なことに、これはこの関数内にある場合にのみ発生します。たとえば、次を使用する場合:

  geocode: (location) ->
    data = 
      location: location

    $.ajax(
      type: 'POST'
      url: '/search/geocode'
      data: data
      dataType: 'json'

      error: (jqXHR, textStatus, errorThrown) =>
        alert("ERROR")


      success: (response, text, xhr) =>
        @model.set(coords: response)
        @center(@model.get('coords'))
        )

同じビュー内で機能し、うまく機能します...しかし、モデルを設定するための他の機能を取得できません。これは、非同期であることについての何かだと思います。私は決してこれの専門家ではありません。私はバックボーンを手に取っていますが、これは私を困惑させています!

4

1 に答える 1

2

Geolocation APIgetCurrentPositionは、コールバック関数の特定のコンテキストを指定しないため、コールバックthis内はおそらくwindow;です。window通常、modelプロパティはないので、これは次のとおりです。

handle: (response) ->
  @model.set(coords: response)

getCurrentPositionそれを呼び出すと、次のようになります。

handle: (response) ->
  window.model.set(coords: response)

したがって、存在しないhandleものを呼び出そうとすると、エラーが発生します。setwindow.modelCannot call method 'set' of undefined

バインドさhandleれたメソッドとして定義してみてください:

handle: (response) =>  # fat arrow here
  @model.set(coords: response)

ビューオブジェクトであり、プロパティがあるため、他の@model.set呼び出しは正常に機能しています。@model

于 2012-06-14T16:48:07.057 に答える