Ember数据:在数组的开头而不是在结尾处插入新项

com*_*ted 4 ember.js ember-data

在我的应用程序中,我正在显示消息的时间轴.我们按照时间顺序从最新到最旧的顺序从服务器检索它们.

3 - Howdy
2 - Greetings
1 - Mahalo
Run Code Online (Sandbox Code Playgroud)

我们的用户还可以添加一条新消息,默认情况下会在队列末尾插入这样的消息

3 - Howdy
2 - Greetings
1 - Mahalo
4 - I'm the new message, last as usual
Run Code Online (Sandbox Code Playgroud)

当我提交时,我希望在顶部显示新消息.我之前编写了一个函数来反转项目数组,但这对于数组中已有的项目不起作用.

4 - I'm the new message, first finally
3 - Howdy
2 - Greetings
1 - Mahalo
Run Code Online (Sandbox Code Playgroud)

在这种情况下,最好的方法是什么?理想情况是Ember Data可以预先添加到内容数组而不是追加.还有其他选择可能更好吗?

Mil*_*Joe 5

对于涉及排序的大多数情况,它被推荐使用Ember.SortableMixin,它被烘焙成Ember.ArrayController.

请参考JSFiddle中的这个概念性示例:http://jsfiddle.net/schawaska/tbbAe/

在此示例中,模型有一个DateTime名为的字段when,我用于过滤:

App.Greeting = DS.Model.extend({
    text: DS.attr('string'),
    when: DS.attr('date')                  
});

App.Greeting.FIXTURES = [
    {id: 1, text: 'First', when: '3/4/2013 2:44:52 PM'},
    {id: 2, text: 'Second', when: '3/4/2013 2:44:52 PM'},
    {id: 3, text: 'Third', when: '3/4/2013 2:44:52 PM'},
    {id: 4, text: 'Fourth', when: '3/4/2013 3:44:52 PM'}
];
Run Code Online (Sandbox Code Playgroud)

在控制器中,我唯一要做的就是设置属性的名称和排序方向:

App.SortingMixinController = Em.ArrayController.extend({
    sortProperties: ['when'],
    sortAscending: false
});
Run Code Online (Sandbox Code Playgroud)

然后在我的Handlebars模板中,我可以正常使用{{each}}帮助器.

因为在这个例子中,所有的日期都是相同的,除了Forth(由于排序首先出现),还因为SortableMixin,这些值将通过另一个属性排序 - 我在这里假设Id.

我在那个小提琴中采用的另一种方法是使用计算属性.我不太确定这种方法,因为它似乎消耗了更多的资源,而且代码中的代码App.SortingPropertyController值得大笑,但有些方法可以显示可能性.