我有以下2个控制器:
控制器/学生/ index.js
import Ember from 'ember';
export default Ember.ObjectController.extend({
hasDebt: function(){
var totalCredit = this.get('totalCredit');
var totalCreditSpent = this.get('totalCreditSpent');
if (totalCreditSpent > totalCredit)
{
return true;
}
return false;
}.property('payments.@each', 'lessons.@each'),
});
控制器/ students.js
import Ember from 'ember';
export default Ember.ArrayController.extend({
itemController: 'student/index',
sortProperties: ['fullName'],
sortAscending: true,
debts: function(){
var allDebts = [];
var totalDebts = 0;
this.forEach(function(student){
if (student.get('hasDebt'))
{
allDebts.push({
name: student.get('fullName'),
amount: student.get('availableCredit')
});
totalDebts += student.get('availableCredit');
}
});
return {'all': allDebts, 'total': totalDebts};
}.property('this.@each.payments', 'this.@each.lessons'),
});
一切都按预期工作。我可以通过hasDebt
访问每个元素的itemController
属性。
现在我想在IndexRoute的仪表板中显示债务,因此我创建了以下附加控制器,希望能够通过使用需求来访问StudentsController
:< / p>
控制器/ index.js
import Ember from 'ember';
export default Ember.Controller.extend({
needs: ['students'],
debts: function(){
var debts = [];
console.log( this.get('controllers.students.debts') );
this.get('controllers.students').forEach(function(student){
console.log('student');
});
return debts;
}.property(''),
});
我似乎无法访问StudentsController
及其任何属性。
我做错了什么?
答案 0 :(得分:0)
我认为计算属性必须观察属性才能被填充。在您的示例中:
<强>控制器/ index.js 强>
export default Ember.Controller.extend({
needs: ['students'],
students: Em.computed.alias('controllers.students'),
debts: function() {
...
}.property('students.debts')
});
在此示例中,我还通过在控制器中提供映射到students
的{{3}}来更轻松地使用学生。
调试时使用浏览器的控制台也非常方便。尝试运行类似下面的内容,看看会发生什么。
App.__container__.lookup('controller:index').get('students')
这假定您的应用程序存在于 App 命名空间下。