我决定在我的Ember应用中使用UTC日期,所以按照建议here我创建了以下转换:
应用/变换/ utc.js
import DS from "ember-data";
export default DS.Transform.extend({
serialize: function(value) {
return value ? value.toJSON() : null;
},
deserialize: function(value) {
return moment.utc(value);
}
});
然后我在我的模型中使用它:
应用/模型/ payment.js
import DS from 'ember-data';
export default DS.Model.extend({
student: DS.belongsTo('student'),
date: DS.attr('utc'),
amount: DS.attr('number'),
formattedDate: function() {
var date = this.get('date');
return moment(date).format("DD/MM/YYYY");
}.property('date')
});
在使用utc
转换之前,我可以使用此功能对付款进行排序:
payments: (function() {
return Ember.ArrayProxy.createWithMixins(Ember.SortableMixin, {
sortProperties: ['date'],
sortAscending: false,
content: this.get('content.payments')
});
}).property('content.payments'),
现在,在使用utc
转换后,上述功能已不再适用。知道为什么吗?
答案 0 :(得分:1)
我相信它是因为时刻不会给你日期对象,它会给你一个特殊的时刻对象。通常情况下,这并不重要,因为时刻会为这些对象提供一个valueOf
方法,该方法将满足内置的Javascript比较运算符。然而,Ember使用custom sort function。 Looking at the source code for Ember.compare,我们可以看到Javascript日期对象的特定路径,但对于普通的Javascript对象,它总是返回0(同等排序)。
长话短说,使用比较函数而不是比较属性名称(使用内置的Javascript比较运算符):
sortFunction: function(a, b) {
return (a < b ? -1 : 1);
}