在我的应用程序中,我正在显示消息的时间表。我们按照时间顺序从最新到最旧的顺序从服务器检索它们。
3 - Howdy
2 - Greetings
1 - Mahalo
我们的用户还可以添加新消息,默认情况下会插入到队列末尾,如此
3 - Howdy
2 - Greetings
1 - Mahalo
4 - I'm the new message, last as usual
当我提交时,我希望新邮件显示在顶部。我之前编写了一个函数来反转项目数组,但这对于数组中已有的项目不起作用。
4 - I'm the new message, first finally
3 - Howdy
2 - Greetings
1 - Mahalo
在这种情况下,最好的方法是什么?理想情况是Ember Data可以预先添加到内容数组而不是追加。还有其他选择可能更好吗?
答案 0 :(得分:5)
对于涉及排序的大多数情况,我们建议您使用Ember.SortableMixin
,Ember.ArrayController
会加入http://jsfiddle.net/schawaska/tbbAe/。
请参阅JSFiddle中的这个概念示例:{{3}}
在此示例中,模型有一个名为DateTime
的{{1}}字段,我将其用于过滤:
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'}
];
然后在我的Handlebars模板中,我可以正常使用App.SortingMixinController = Em.ArrayController.extend({
sortProperties: ['when'],
sortAscending: false
});
助手。
因为在此示例中,除 Forth (由于排序首先出现)以及{{each}}
之外的所有日期都相同,因此这些值将通过另一个属性 - 我在这里假设Id。
我在那个小提琴中采用的另一种方法是使用计算属性。我不太确定这种方法,因为它似乎消耗了更多的资源,SortableMixin
中的代码值得大笑,但有点可以表明可能性。
答案 1 :(得分:-4)
您可以使用基本JavaScript在数组中的给定位置放入新项目吗?不确定这是基本的ajax + js对象还是完整的ember-data模型,但这适用于简单的js数组示例
var arr = [];
arr[0] = "Jani";
arr[1] = "Hege";
arr[2] = "Stale";
arr[3] = "Kai Jim";
arr[4] = "Borge";
console.log(arr.join());
arr.splice(2, 0, "Lene");
console.log(arr.join());
上面代码的输出将是:
Jani,Hege,Stale,Kai Jim,Borge
Jani,Hege,Lene,Stale,Kai Jim, Borge