2013-08-17 65 views
1

我正處在學習Ember的痛苦緩慢的過程中,並且在非平凡的例子中發現指南和文檔嚴格限制。如何在Ember.js中的控制器之間進行數據通信?

現在我的問題。

給出下面的路由器定義:

App.Router.map(function() { 
this.resource('home', function() { 
    this.resource('weather', function() { 
    this.route('site', {path: '/:weather_site'}); 
    }); 
}); 

當用戶進入home.weather.index路線模型鉤執行並獲取服務器的所有氣象信息。當用戶進入home.weather.some_site時,新路線的模型掛鉤將從服務器中爲該特定站點提供天氣數據。如何防止這種冗餘?換句話說,控制器如何能夠相互交流數據?我應該在每個Route中使用setupController掛鉤來實現這個目標還是有更好的方法?

有沒有什麼好的資源可以幫助我理解進出Ember的數據流?有沒有什麼好的資源可以幫助我更快地學習Ember,而不是深入研究源代碼?

回答

1

如何防止冗餘?

目前尚不清楚家庭/天氣/索引的模型掛鉤是否/如何/爲什麼會從服務器獲取所有天氣信息。如果這是期望的行爲,那麼完全同意,當用戶進入家庭/天氣/站點時沒有理由獲取相同的數據。

如果您使用的餘燼數據應該沒有冗餘,因爲:

  • 當用戶訪問家/天氣/指數App.Site.find()獲取所有氣象數據
  • 當他們參觀家/天氣/網站App.Site.find(weather_site)回報如果用戶直接訪問home/weather/site(或刷新瀏覽器),則App.Site.find(weather_site)將調用服務器並僅提取該站點的數據。

所以除非有什麼我失蹤沒有冗餘來防止。

換句話說,控制器如何能夠相互溝通數據?

似乎沒有必要,但因爲你問:控制器通過綁定相互通信。您通過控制器的needs屬性聲明從一個控制器到另一個控制器的依賴關係,然後Ember自動注入該依賴項。有關這種工作方式的更多信息,請參閱灰燼指南dependencies-between-controllers

我應該在每個Route中使用setupController掛鉤來實現這個目標還是有更好的方法?

在這種情況下不應該有必要。

有沒有什麼好的資源可以幫助我理解進出Ember的數據流?

不清楚你的意思是數據流。最好的猜測是,你會從盧克苦的gothamjs presentation

是否有良好的資源,幫助我學習灰燼比挖成源更快的學到很多東西?

閱讀源代碼總是一個不錯的選擇,但是還有很多其他資源。我建議檢查embercastsember weekly

+0

好的,這清除了很多。 (非常感謝您提供的鏈接)。如果我不使用ember-data,我該如何實現這樣的緩存?我的意思是從Ember中「存儲」的服務器獲取的所有記錄在哪裏?這樣的緩存在哪裏存在以便可以從許多控制器獲得? – kliron

+0

沒有一種方法可以實現這樣的緩存。它可以是一個簡單的數組,連接到像App.WeatherController這樣的控制器或像App.WeatherStore這樣的自定義對象。如果它是一個自定義對象,你可能會使用一個初始化工具來設置它並注入到控制器中,例如http://netdyworm.com/blog/2013/04/03/ember-initializers。除此之外,您可能會看到燼數據本身並遵循相同的模式或考慮像[ember-model](https://github.com/ebryn/ember-model)或[EPF](http:// epf .IO)。在所有情況下,緩存只是一個內存數組。 –

相關問題