我正在研究一個傳統的Ember應用程序,它有一點時髦的設置,我正在嘗試清理並遵循約定。一個問題是,我們返回一個包含數組的對象,而不是從索引路由的model
鉤子返回數組。所以,我包裹model
在ArrayProxy
在setupController
這樣的:我可以將額外的計算屬性添加到Ember ArrayProxy中嗎?
setupController: (controller, model) ->
model_proxy = Ember.ArrayProxy.create({content: model.get('item')})
controller.set('content', model_proxy)
這實際工作(即content
當AJAX承諾解決和model.item
加載數據被更新)。問題是,我還需要在我的控制器中使用model
上的另一個屬性。 model
有一個needsLoader
屬性,它被初始化爲true,然後在承諾解析時設置爲false。我們正在使用它來向用戶顯示一個微調器,同時從服務器獲取數據。
所以,我的問題是:有什麼辦法可以代理needsLoader
在ArrayProxy
?
一個解決方法我都試過是原來的model
鉤住控制器在非標準的方式:
setupController: (controller, model) ->
....
controller.set('_model', model)
....
這讓我從控制器訪問needsLoader
致電@get('_model.needsLoader')
。它可以工作,但我想在路由器中完成所有骯髒的工作,以便我可以像往常一樣調用model
,在我的控制器中有一個乾淨的界面。
謝謝!
我會建議你使用「模式」掛鉤,你爲什麼不使用它?如果你使用它,你將擁有路由器api提供的所有功能,就像這個http://emberjs.com/guides/routing/loading-and-error-substates/#toc_the-code-loading-代碼事件,如果您檢查代碼中的註釋,您可以將微調器放置在那裏。您也可以在ApplicationRoute中定義它,這樣,微調器將顯示所有正在加載的模型。 – fanta
這只是一個數組懸掛在數組之外的簡單示例。我們使用hal,因此需要以類似的方式處理大量的元數據。 – spinlock
所以,基本上,一旦所有元數據已經加載,你就設置needsLoader?你是這個意思嗎 ?因爲你可以通過模型中的承諾來做到這一點。 – fanta