在日期范围内过滤

Filter within a date range

我有一个 cruise 模型,其中有许多 tripstrip 存储开始和结束日期。我想过滤 cruises 开始于或晚于 earliestStartDate 并且结束最晚于 latestEndDate.

app/models/cruise.js

import DS from 'ember-data';

export default DS.Model.extend({
  name: DS.attr('string'),
  trips: DS.hasMany('trip', { async: true })
});

app/models/trip.js

import DS from 'ember-data';

export default DS.Model.extend({
  starts_on: DS.attr('date'),
  ends_on: DS.attr('date')
});

app/templates/index.hbs

{{date-picker date=earliestStartDate valueFormat='YYYY-MM-DD'}
{{date-picker date=latestEndDate valueFormat='YYYY-MM-DD'}}

如何在此控制器中更改 filteredCruises 以过滤在给定日期内有行程的 cruises

app/controllers/index.js

[...]

filteredCruises: function() {
    var earliestStartDate = this.get('earliestStartDate');
    var latestEndDate = this.get('latestEndDate');
    var cruises = this.get('model.cruises');

    return cruises;
}.property('model.cruises','earliestStartDate','latestEndDate'),

[...]

我有一段时间没碰过 Ember,也没有 tested/executed 这个代码,但我 认为 这可能对你有用(我相信这可以优化):

[...]

filteredCruises: function() {
    var earliestStartDate = this.get('earliestStartDate');
    var latestEndDate = this.get('latestEndDate');
    var cruises = this.get('model.cruises');

    return cruises.filter(function(cruise) {
        return cruise.get('trips').filter(function(trip) {
            return ((trip.get('starts_on') >= earliestStartDate) && (trip.get('ends_on') <= latestEndDate));
        });
    });

}.property('model.cruises','earliestStartDate','latestEndDate'),

[...]