使用自定义转换时,SortableMixin不排序

时间:2014-10-06 21:09:40

标签: ember.js ember-data

我决定在我的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转换后,上述功能已不再适用。知道为什么吗?

1 个答案:

答案 0 :(得分:1)

我相信它是因为时刻不会给你日期对象,它会给你一个特殊的时刻对象。通常情况下,这并不重要,因为时刻会为这些对象提供一个valueOf方法,该方法将满足内置的Javascript比较运算符。然而,Ember使用custom sort functionLooking at the source code for Ember.compare,我们可以看到Javascript日期对象的特定路径,但对于普通的Javascript对象,它总是返回0(同等排序)。

长话短说,使用比较函数而不是比较属性名称(使用内置的Javascript比较运算符):

sortFunction: function(a, b) {
    return (a < b ? -1 : 1);
}