2012-12-13 51 views
1

我正在嘗試使用Google地圖JSON API實現地理編碼。如何觀察靜態對象的變化?

我創建了一個位置模型,和ObjectController, 該模型具有異步地理編碼邏輯。

我希望控制器觀察模型的變化以反映最新的數據。

我與結合,並觀察嘗試都和都不起作用:

App.Location = Ember.Object.extend({ 
    formatted_address: null, 
    location: { 
     lat: null, 
     lng: null 
    } 
}) 

App.Location.reopenClass({ 
    geocoded: Ember.Object.create(), 
    geocode: function(address) { 
     $.ajax({ 
      url: 'http://maps.googleapis.com/maps/api/geocode/json?sensor=false&address=' + address, 
      dataType: 'json', 
      context: this, 
      success: function(response) { 
       App.Location.geocoded.set('response', response); 
      } 
     }); 

     return this.geocoded; 
    } 
}); 

App.LocationController = Ember.ObjectController.extend({ 
    contentBinding: 'App.Location.geocoded', 
    testProperty: function() { 
     console.log('test');  
    }.property('content'), 
    testObserve: function() { 
     console.log('test'); 
    }.observes('App.Location.geocoded') 
}); 

編輯:更改爲observes('App.Location.geocoded.response')解決問題。它也可以與綁定?有一個更好的方法嗎 ?

回答

1

在這裏寫下contentBinding: 'App.Location.geocoded'時,內容在App.Location.geocoded更改時更新。但是在成功處理程序中,您不會更改地理編碼對象,而只需更新其響應屬性。

所以,如果你想保持與地理編碼對象的綁定,你可以嘗試做

App.Location.set('geocoded', Ember.Object.create({response: response})); 

在阿賈克斯成功處理程序。

+0

如何將ObjectController與Object之間的關聯? ArrayController你可以pushObject ..你如何更新ObjectController的內容,所以任何綁定將更新? –

+0

Euh,contentBinding:'App.Location.geocoded'和App.Location.set('geocoded',Ember.Object.create({response:response}));應該工作:s –