2012-06-14 84 views
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')) 
     ) 

裏面它的工作原理相同的觀點,以及它工作得很好。不過我只是不能得到其他功能設置模式。我認爲這是關於它異步的東西。我絕不是這方面的專家,我正在撿拾Backbone,但是這讓我難受!

回答

2

Geolocation API不指定getCurrentPosition回調函數任何特定的上下文,以便this回調裏面可能是window; window通常不會有model屬性,因此這樣的:

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

最終看起來像這樣當getCurrentPosition調用它:

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

所以handle試圖呼籲不存在window.modelset和有你的Cannot call method 'set' of undefined錯誤。

嘗試定義handlebound method

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

你的其他@model.set呼叫工作正常,因爲@是您的視圖對象和確實有model財產。

+0

這真棒謝謝 –