2013-11-20 50 views
1

我有一個應用程序與幾條路線,每個模板中應顯示(或隱藏)的元素 - 使用相同的條件,因此我創建了一個Central控制器,我聲明條件,然後覆蓋在像(僞代碼)每個控制器的方法:灰燼,把手和共享條件

App.CentralController = Ember.Controller.extend({ 
    canEdit: function(){ return someCalculatedBool; }.property('view'), 
    canSomethingElse: function(){ return someOtherBool; }.property('view') 
}); 

App.DetailsController = Ember.Controller.extend({ 
    needs: ['central'], 
    canEdit: function(){ return this.get('controllers.central').canEdit() }.property('view'), 
    canSomethingElse: function(){ return this.get('controllers.central').canSomethingElse(); }.property('view') 
}) 

所以在把手模板詳細信息我可以用它喜歡:

{{#if canEdit}} 
    [Edit Button] 
{{/if}} 

反正條件數的增長,我需要overrride e中的每個條件方法ach控制器,這不是最佳的。

問題:如何在直接指向Central控制器的視圖中使用這些條件?

Vesions:

  • 灰燼:1.1.2
  • 把手:1.0.0

回答

1

只需添加一個別名到控制器,並在視圖中使用的點的路徑:

App.DetailsController = Ember.Controller.extend({ 
    needs: ['central'], 
    central: Ember.computed.alias('controllers.central') 
}); 


{{#if central.canEdit}} 
    [Edit Button] 
{{/if}} 
+1

記住你也可以在'get'&'set'中使用dotpaths - 這是Emb的一部分呃NextStep的遺產。節省大量的輸入 - 特別是當鏈的任何部分爲空時,你需要一個null值,'get' /'set'會爲你做。注意Demeter;) –

+0

這就是我錯過的知識;)thx,順便說一句,這種方法有一些顯着的性能影響? – biesior

+1

我沒有對它進行基準測試。我懷疑這是否意義重大,只要你沒有創建相互依賴的屬性,需要許多通行證來解決,這是使用'observes'時必須注意的。在'get' /'set'中使用dotpaths手動構建鏈的唯一開銷是最初的字符串分割。 –