我正在努力做到这一点:我有一个名为' 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以及它是如何运作的。
感谢您的反馈。
答案 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'));
}
或controller
或component
中的计算属性:
tripsToday: Ember.computed('trips.@each.isBookedToday', {
return get(this, 'trips').filterBy('isBookedToday');
})
小心点。如果您在一夜之间打开页面,这将导致令人困惑的事情!当您的日期更改时,计算属性将不自动重新计算!