0

私は2つのモデルを持っています

タイムエントリー

TimeTray.TimeEntry = DS.Model.extend({
    startTime: DS.attr('date'),
    endTime: DS.attr('date'),
    status: DS.attr('string'),
    offset: DS.attr('number'),
    isDeleted: DS.attr('boolean'),
    task: DS.belongsTo('task'),
    duration: function () {
        return TimeTray.timeController.duration(this.get('startTime'), this.get('endTime'));
    }.property('startTime', 'endTime'),
    title: function () {
        if (this.get('task')) {
            return this.get('task').get('title');
        }
    }.property('task')
});

仕事

TimeTray.Task = DS.Model.extend({
    title: DS.attr('string'),
    totalTime: function () {
        var timeEntries = this.get('timeEntries')
        for (var entry in timeEntries) {
           var duration =  entry.get('duration')
        }
    }.property('timeEntries'),
    isDeleted: DS.attr('boolean'),
    isRecording: DS.attr('boolean', { defaultValue: false }),
    timeEntries: DS.hasMany('TimeEntry')
});

タスクに費やされた合計時間を計算できるように、timeentry エンティティの配列を取得するにはどうすればよいですか? 上記の方法は機能しません。

Time Entry title プロパティが機能します。

4

2 に答える 2

0

あなたのtotalTimeメソッドは、timeEntry の期間を合計することも、値を返すこともありません。また、property正しく設定されていません (を使用@each)。これを行う正しい方法は次のとおりです。

totalTime: function () {
    var timeEntries = this.get('timeEntries')
    var duration = 0;
    for (var entry in timeEntries) {
       duration = duration + entry.get('duration');
    }
    return duration;
}.property('timeEntries.@each.duration'),

または、 and を使用してよりエレガントgetEach()reduce():

totalTime: function () {
    return this.get('timeEntries').getEach('duration').reduce(function(accum, item) {
        return accum + item;
    }, 0);
}.property('timeEntries.@each.duration'),
于 2013-10-01T16:50:00.297 に答える