我的主控制器包含一系列公司,有很多细节。
我想提供几个不同的视图来切片和总结这些数据。汇总数据所需的计算非常复杂,我需要有一个特定的地方来存储它们。我是不是该
- 将数据操作方法添加到每个视图对象,或
- 为每个视图创建一个新控制器,并将数据操作方法添加到控制器?
文档的入门部分将剩余待办事项的数量添加到控制器,所以这让我认为我应该为每个视图创建单独的控制器。
作为快速跟进:如果我选择#2,我是否应该创建许多扩展我原来的 CompaniesController 的控制器,这样我就不必重新加载任何数据?
为每个视图对象添加数据操作方法
请不要!业务逻辑更适合控制器。
或者为每个视图创建一个新的控制器,并将数据操作方法添加到控制器中?
有点,如果每个控制器的计算基本相同,您可以使用 a 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带有烘焙混合的或不创建的。
例如,假设在您的模板中您正在循环访问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;
}
...
});
希望能帮助到你。