2013-07-18 49 views
2

我的主控制器包含一系列公司,有很多細節。哪裏應該查看/模板特定的數據去?

我想提供幾個不同的視圖,分片和總結這些數據。總結數據所需的計算非常複雜,我需要有一個特定的地方來存儲它們。我應該

  1. 添加數據操作方法,每個視圖對象,或
  2. 爲每個視圖創建一個新的控制器和數據處理方法添加到控制器

的文檔的入門部分添加了剩餘待辦事項to the controller的數量,所以這讓我覺得我應該爲每個視圖創建單獨的控制器。

作爲一個快速跟進:如果我去#2,我應該創建很多控制器來擴展我的原始CompaniesController,所以我不必重新加載任何數據?

回答

2

添加數據操作方法,每個視圖對象

請不要!業務邏輯更適合於控制器。

或爲每個視圖創建一個新的控制器,並將數據操作方法添加到控制器?

排序的,如果計算正在做的基本上是每個控制器,你可以用Mixin去了,這樣的事情是相同的:

App.CalculationBase = Ember.Mixin.create({ 
    doHeavyCalculations: function() { 
    ... 
    return results; 
    } 
    ... 
}); 

再搭配到你的其他控制器,如:

App.MyController = Ember.ObjectController.extend(App.CalculationBase, { 
    // here you can then call this.doHeavyCalculations() 
}); 

App.MyOtherController = Ember.ArrayController.extend(App.CalculationBase, { 
    // here you can then call this.doHeavyCalculations() 
}); 

但是,根據你的設置如何,你也可以創建itemController與一個烘焙mixin或不。

例如,假設在您的模板你遍歷的CompaniesController內容是這樣的:

{{#each company in model}} 
    {{company}} 
{{/each}} 

然後itemController方法將實例化一個單獨CompanyController每個公司的項目。

App.CompaniesController = Ember.ArrayController.extend({ 
    itemController: 'company' 
}); 

App.CompanyController = Ember.ObjectController.extend({ 
    doHeavyCalculations: function() { 
    ... 
    return results; 
    } 
    ... 
}); 

希望它有幫助。

+0

非常有幫助的回答,謝謝!如果我使用mixins,我應該有一個實際存儲我公司的父母控制器嗎?孩子控制器將或多或少是聚合/過濾器... RevenueController,DelinquincyController等 –

+0

@SamSelikoff聽起來不錯,有一個父控制器 – intuitivepixel