【发布时间】:2014-06-18 06:04:53
【问题描述】:
我有两个相关的模型 - 任务和需求。需求可以是 3 种类型(零件、工具、材料)之一。一个任务可以有多个需求,包括多个相同类型的需求。
Task A
Requirement 1 (Part)
Requirement 2 (Part)
Requirement 3 (Tool)
Requirement 4 (Material)
Requirement 5 (Tool)
查看单个任务时,我想在一种摘要视图中按类型对需求列表进行分组。
Task A
Parts Requirements (2)
Tooling Requirements (2)
Materials Requirements (1)
我有一个 computedProperty,主要在我的 TaskController 中运行,但我似乎无法让它返回我正在构建的需求摘要数组。两个模型的所有夹具数据都已正确设置(我可以迭代每个需求并在模板中显示它而没有问题)。
这里是模型
任务模型
App.Task = DS.Model.extend({
name: DS.attr()
requirements: DS.hasMany('requirement', { async: true})
});
需求模型
App.Requirement = DS.Model.extend({
task_id: DS.belongsTo('task'),
type: DS.attr(),
description: DS.attr(),
quantity: DS.attr()
})
这里是控制器:
App.TaskController
App.TaskController = Em.ObjectController.extend({
requirementSummary: function () {
var self = this,
results = [];
self.get('requirements').then(function(requirements) {
var arrRequirements = requirements.get('content');
var parts = {
name: 'Parts',
description: '',
count: 0,
css_class: 'fa-cog'
},
tools = {
name: 'Tools',
description: '',
count: 0,
css_class: 'fa-wrench'
},
materials = {
name: 'Materials',
description: '',
count: 0,
css_class: 'fa-tint'
};
arrRequirements.forEach(function (requirement) {
if (requirement._data.name == 'Part') {
parts.description += requirement._data.description + ' (' + requirement._data.quantity + ')<br>';
parts.count++;
} else if (requirement._data.name == 'Material') {
materials.description += requirement._data.description + ' (' + requirement._data.quantity + ')<br>';
materials.count++;
} else if (requirement._data.name == 'Tooling') {
tools.description += requirement._data.description + ' (' + requirement._data.quantity + ')<br>';
tools.count++;
}
});
if (parts.description !== '') {
parts.description = parts.description.replace(/(<br>\s*)+$/);
} else {
parts.description = "No Parts requirements found";
}
if (materials.description !== '') {
materials.description = materials.description.replace(/(<br>\s*)+$/);
} else {
materials.description = "No Materials requirements found";
}
if (tools.description !== '') {
tools.description = tools.description.replace(/(<br>\s*)+$/);
} else {
tools.description = "No Tooling requirements found";
}
results.pushObject(parts);
results.pushObject(tools);
results.pushObject(materials);
});
return results;
}.property()
});
目前它返回空的结果数组,因为它正在等待self.get 承诺履行。如果我返回 self.get('requirements').then(...) 的结果,那么它会返回 promise,而不是 results 数组,并且 Ember 不高兴,因为它不是数组。我想要的是它返回填充的结果数组。
我发现的最接近的问题是here,但它要么不能解决问题,要么我遗漏了一些东西。
【问题讨论】: