Ember返回今天创建的模型的长度

时间:2016-02-26 23:20:29

标签: ember.js ember-data

我正在努力做到这一点:我有一个名为' trip'和内部旅行的模型,名为' createdToday',它返回创建旅行的日期。我想要的是返回今天的旅行清单。

这是我的旅行模型:

import DS from 'ember-data';

export default DS.Model.extend({
    driver: DS.belongsTo('driver', {
        async: true,
        inverse: 'trip'
    }),


    ..... etc .......


    createdAt: DS.attr('string', {
        defaultValue() {
            return new Date();
        }
    }),
    isBookedToday: function(trip) {
        var today = new Date().toDateString();
        return (today === trip.get('createdAt').toDateString);
    },
    getTripsToday: Ember.computed('trip.@each.createdAt', function() {
        var tripsToday = this.get('trip');
        return tripsToday.filterBy('isBookedToday', true).get('length');
    })

});

在我的isBookedToday中,我试图查看单个旅行的创建时间是否与今天的时间相同,并且在getTripsToday中,我试图遍历所有旅程并通过isBookedToday进行过滤。

在我的.hbs文件中,我说:{{trips.getTripsToday}},它不会渲染任何东西,所以有些不对劲。

我想我最为困惑的是Ember的@each以及它是如何运作的。

感谢您的反馈。

1 个答案:

答案 0 :(得分:1)

首先,您必须了解您的Trip Model实例代表行程!它绝对不是放置一个功能的正确位置,它可以为您提供过滤的旅行列表!

下一个isBookedToday是正常函数,而不是计算属性。所以你不能filterBy就可以了。

可能希望在旅途中实施isBookedToday,但您必须在获取它们的同一地点过滤您的行程!可能位于model()component上的controller挂钩或计算属性中。

所以你可以做但不需要在你的models/trip.js中做:

...
isBookedToday: Ember.computed('createdAt', {
    get() {
        let now = new Date();
        let created = get(this, 'createdAt');
        return now.getFullYear() === created.getFullYear() &&
            now.getMonth() === created.getMonth() &&
            now.getDate() === created.getDate();
    }
})
...

然后在你的model钩子中:

model() {
    return this.store.findAll('trip').then(trips => trips.filterBy('isBookedToday'));
}

controllercomponent中的计算属性:

tripsToday: Ember.computed('trips.@each.isBookedToday', {
    return get(this, 'trips').filterBy('isBookedToday');
})

小心点。如果您在一夜之间打开页面,这将导致令人困惑的事情!当您的日期更改时,计算属性将自动重新计算!