2

我的主控制器包含一系列公司,有很多细节。

我想提供几个不同的视图来切片和总结这些数据。汇总数据所需的计算非常复杂,我需要有一个特定的地方来存储它们。我是不是该

  1. 将数据操作方法添加到每个视图对象,或
  2. 为每个视图创建一个新控制器,并将数据操作方法添加到控制器

文档的入门部分将剩余待办事项的数量添加到控制器,所以这让我认为我应该为每个视图创建单独的控制器。

作为快速跟进:如果我选择#2,我是否应该创建许多扩展我原来的 CompaniesController 的控制器,这样我就不必重新加载任何数据?

4

1 回答 1

2

为每个视图对象添加数据操作方法

请不要!业务逻辑更适合控制器。

或者为每个视图创建一个新的控制器,并将数据操作方法添加到控制器中?

有点,如果每个控制器的计算基本相同,您可以使用 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;
  }
  ...
});

希望能帮助到你。

于 2013-07-18T16:38:39.757 回答