访问控制器从另一个控制器计算的属性

里卡多·巴托利

我有以下控制器:

App.StudentIndexController = Ember.ObjectController.extend({
    hasDebt: function(){
        var totalCredit = this.get('totalCredit');
        var totalCreditSpent = this.get('totalCreditSpent');

        if (totalCreditSpent > totalCredit) 
        {
            return true;
        }
        else
        {
            return false;
        }
    }.property('payments.@each', 'lessons.@each'),

    availableCredit: function(){

        var totalCredit = this.get('totalCredit');
        var totalCreditSpent = this.get('totalCreditSpent');

        return totalCredit - totalCreditSpent;
    }.property('payments.@each', 'lessons.@each'),

    totalCredit: function(){
        var totalCredit = 0;

        var payments = this.get('payments');
        payments.forEach(function(payment){
            totalCredit += payment.get('amount');
        });

        return totalCredit;
    }.property('payments.@each', 'lessons.@each'),

    totalCreditSpent: function(){
        var totalCreditSpent = 0;
        var lessons = this.get('lessons');
        lessons.forEach(function(lesson){
            var duration = lesson.get('duration');
            var price;
            switch (duration)
            {
                case 45: price = 15; break;
                case 60: price = 20; break;
            }
            totalCreditSpent += price;
        });

        return totalCreditSpent;
    }.property('payments.@each', 'lessons.@each')
});

我需要在以下控制器中访问其中一些计算所得的属性,以便能够基于每个学生的债务来计算totalDebt:

App.StudentsIndexController = Ember.ArrayController.extend({
    totalDebt: function(){
        var students = this.model.content;
        var totalDebt = 0;

        students.forEach(function(student){
            if (student.hasDebt)
            {
                totalDebt += student.availableCredit;
            }
        });

        return totalDebt;
    }.property('student.payments.@each', 'student.lessons.@each'),
});

但是,这不起作用。我想不是因为计算的属性在控制器中,并且我正在尝试从模型访问它们。

StudentIndexControllerfromStudentsIndexController控制器中访问计算属性的最佳解决方案是什么?

ahaurw01

看起来,您的需求超出了needsapi的范围,因为您想访问每个模型而不只是一个模型的计算属性使用该needs功能可以访问该名称单例控制器。如果您可以访问一个StudentIndexController实例,则不会告诉该控制器使用哪种模型(如果有)。相反,您需要使用itemControllerapi使用学生控制器的非单个实例包装每个学生。

请参阅可解决您问题的jsbin(使用简化的模型)。http://emberjs.jsbin.com/gexuj/2/edit

要点是这样的:数组控制器会将itemController属性定义为要在上下文中包装每个模型的控制器的常规名称。然后,您可以访问每个学生的那些很酷的计算属性,并根据需要进行汇总。

App.StudentsIndexController = Ember.ArrayController.extend({
  itemController: 'studentIndex',
  doesAnybodyHaveDebt: function () {
    return !!this.filterBy('hasDebt').length;
  }.property('@each.hasDebt')
});

在此处查找有关项目控制器属性的更多信息:http : //emberjs.com/api/classes/Ember.ArrayController.html

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从另一个控制器访问变量

来自分类Dev

如何从另一个控制器访问需求控制器?

来自分类Dev

访问另一个控制器上的控制器范围

来自分类Dev

灰烬绑定控制器属性以在另一个控制器中查询

来自分类Dev

灰烬绑定控制器属性以在另一个控制器中查询

来自分类Dev

如何从另一个控制器访问另一个控制器的动作

来自分类Dev

在Rails中访问另一个控制器中的一个控制器变量

来自分类Dev

从一个控制器访问另一个控制器的数据

来自分类Dev

如何访问另一个控制器动作中的一个控制器动作?

来自分类Dev

EXTjs从另一个控制器访问一个控制器中的数据集

来自分类Dev

如何从一个控制器访问变量到另一个控制器

来自分类Dev

从另一个控制器触发一个控制器的“动作”

来自分类Dev

Web API访问控制器方法来自另一个控制器方法

来自分类Dev

从另一个访问一个Web API控制器

来自分类Dev

用另一个导航控制器替换当前的导航控制器

来自分类Dev

另一个控制器内的Angular ng-include控制器

来自分类Dev

控制器调用另一个控制器C#WebApi

来自分类Dev

如何通过控制器返回另一个控制器的局部视图?

来自分类Dev

用另一个视图控制器快速更改视图控制器

来自分类Dev

ExtJS初始化控制器在另一个控制器中

来自分类Dev

Symfony 2-从另一个控制器呼叫控制器

来自分类Dev

如何从另一个视图控制器实例化导航控制器?

来自分类Dev

从另一个控制器调用控制器时的依赖注入

来自分类Dev

在AngularJS中的另一个控制器中使用控制器

来自分类Dev

从另一个视图控制器通知视图控制器

来自分类Dev

在另一个控制器的显示内为控制器创建表单

来自分类Dev

另一个控制器中的呼叫控制器-CodeIgniter

来自分类Dev

来自另一个控制器的Symfony2呼叫控制器

来自分类Dev

在控制器动作中插入另一个控制器动作

Related 相关文章

  1. 1

    从另一个控制器访问变量

  2. 2

    如何从另一个控制器访问需求控制器?

  3. 3

    访问另一个控制器上的控制器范围

  4. 4

    灰烬绑定控制器属性以在另一个控制器中查询

  5. 5

    灰烬绑定控制器属性以在另一个控制器中查询

  6. 6

    如何从另一个控制器访问另一个控制器的动作

  7. 7

    在Rails中访问另一个控制器中的一个控制器变量

  8. 8

    从一个控制器访问另一个控制器的数据

  9. 9

    如何访问另一个控制器动作中的一个控制器动作?

  10. 10

    EXTjs从另一个控制器访问一个控制器中的数据集

  11. 11

    如何从一个控制器访问变量到另一个控制器

  12. 12

    从另一个控制器触发一个控制器的“动作”

  13. 13

    Web API访问控制器方法来自另一个控制器方法

  14. 14

    从另一个访问一个Web API控制器

  15. 15

    用另一个导航控制器替换当前的导航控制器

  16. 16

    另一个控制器内的Angular ng-include控制器

  17. 17

    控制器调用另一个控制器C#WebApi

  18. 18

    如何通过控制器返回另一个控制器的局部视图?

  19. 19

    用另一个视图控制器快速更改视图控制器

  20. 20

    ExtJS初始化控制器在另一个控制器中

  21. 21

    Symfony 2-从另一个控制器呼叫控制器

  22. 22

    如何从另一个视图控制器实例化导航控制器?

  23. 23

    从另一个控制器调用控制器时的依赖注入

  24. 24

    在AngularJS中的另一个控制器中使用控制器

  25. 25

    从另一个视图控制器通知视图控制器

  26. 26

    在另一个控制器的显示内为控制器创建表单

  27. 27

    另一个控制器中的呼叫控制器-CodeIgniter

  28. 28

    来自另一个控制器的Symfony2呼叫控制器

  29. 29

    在控制器动作中插入另一个控制器动作

热门标签

归档