【发布时间】:2014-08-23 12:43:18
【问题描述】:
我正在开发一个 Ember.js 应用程序(Ember 1.7、Ember Data Beta 9、REST 适配器)。
我有以下型号:
App.Task = DS.Model.extend({
tasktimes: DS.hasMany('tasktime', {async: true}),
// ...
});
App.Tasktime = DS.Model.extend({
task: DS.belongsTo('task', {async: true}),
user: DS.belongsTo('user', {async: true}),
duration: DS.attr()
//...
});
我想要实现的是获取每个用户的所有任务时间以及总持续时间的数组。
例如:
任务 1:
- 任务时间 1:用户 = 1 / 持续时间 = 5
- 任务时间 2:用户 = 1 / 持续时间 = 2
- 任务时间 3:用户 = 2 / 持续时间 = 4
应该有以下结果:
[
{user: user1, totalDuration: 7},
{user: user2, totalDuration: 4}
]
我不知道如何实现这样的嵌套计算属性。我尝试了各种方法,但到目前为止都没有奏效。 (在我早期的方法中,用户总是无法解决,因此整个事情都不起作用)。
问题是我需要在两个 foreach 循环中使用两个级别的“then”,我不知道如何让它与 Promise 一起使用。
这是基本的想法:
durationPerUser: function() {
var data = Ember.A();
var tt = this.get("tasktimes");
tt.forEach(function(item) {
item.get("user").get(function(user) {
// If no entry exists yet, create a new one
if(data[item.get("user.id")] == undefined) {
data[item.get("user.id")] = {totalDuration: 0, user: item.get("user")};
}
// Add the hours to the array
data[item.get("user.id")].totalDuration += item.get("duration");
});
});
return data;
}.observes("tasktimes.@each.user", "tasktimes.@each.starttime", "tasktimes.@each.endtime", "tasktimes.@each"),
由于涉及的承诺,这当然不起作用。我真的不是承诺等方面的专家,所以也许有一些方法可以做到这一点,到目前为止我只是想念它。
【问题讨论】:
-
我知道这已经有一段时间了,但你有没有想过这个?我有一个几乎相同的场景,涉及 contentItem 及其相关标签,我想对给定 contentItem 的所有标签进行操作。
标签: javascript ember.js ember-data