视图/模板特定数据应该放在哪里?

时间:2013-07-18 16:23:38

标签: ember.js

我的主控制器包含一系列公司,其中包含大量详细信息。

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

  1. 将数据操作方法添加到每个视图对象或
  2. 为每个视图创建一个新控制器,并将数据操作方法添加到控制器
  3. 文档的“入门”部分会添加剩余待办事项to the controller的数量,因此我认为我应该为每个视图创建单独的控制器。

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

1 个答案:

答案 0 :(得分: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

例如,假设您在模板中循环遍历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;
  }
  ...
});

希望它有所帮助。