emberjs - 对从Firebase检索的数据进行排序

时间:2015-10-27 22:38:29

标签: sorting ember.js firebase ember-data emberfire

我花了最后三天试图解决这个问题,我希望有来自这里的人可以提供帮助。

关于设置的注意事项:我正在使用Ember-Cli,因此我的Ember版本为1.13.7,Ember-Data为1.13.8

要了解有关emberJS如何运作的更多信息,我决定创建一个我将在自己的网站上使用的简单博客系统。使用Emberfire插件从Firebase数据库加载数据。

帮助:我无法将检索到的数据按降序排序。例如,如果我在周一,周二,周三,周四和周五创建了5个帖子。每个都有一个数字顺序的唯一时间戳。

当我检索数据时,它按以下顺序显示:

1st ever post (oldest)
2nd ever post
3rd ever post
4th ever post
5th ever post (newest)

我想撤销订单,以便我的最新博文显示在最上面。

我正在使用以下代码检索数据:

return this.store.find('post');

我无法弄清楚如何使用:sortBy来自Ember本身,还是orderBy()来自firebase / emberfire?

我知道它需要在一个控制器内,它将在模型中显示数据之前修改数据。但任何人都可以帮忙吗?

继承了更多代码:

尝试使用控制器 - 它不起作用:

import Ember from 'ember';

 export default Ember.ArrayController.extend({
    sortedModel : function(){
        return this.get('model').sortBy();
    }.property('@each')
});

查看模板:

{{#each sortedModel as |post|}}
    {{#blog-post post=post}}{{/blog-post}}
{{/each}}

{{outlet}}

2 个答案:

答案 0 :(得分:3)

您需要一个属性来订购您的帖子。幸运的是,Firebase会自动提供这样的属性。保存到Firebase的每个项目都会在此时自动获得时间戳。

post模型中,添加timestamp属性,如下所示:

//models/post

export default DS.Model.extend({
  //
  timestamp: DS.attr('number')
  //
});

现在在您的控制器中,您可以按它排序。您不需要@each助手,因为sortBy已经在数组上运行。

//controllers/posts

import Ember from 'ember';

 export default Ember.ArrayController.extend({
    sortedModel : function(){
        return this.get('model').sortBy('timestamps').reverse();
    }
});

认为应该有用,但如果您有任何问题,请在评论中告诉我们!

答案 1 :(得分:1)

既然你说你的帖子阵列已经订购但方法不对。 您可以使用 Array.prototype.reverse();

  

export default Ember.ArrayController.extend //不推荐使用数组和对象。

export default Ember.Controller.extend({
    sortedModel : function() {
        return this.get('model').reverse(); 
    }).property('model') 

注意:如果这不适合你(你的问题更大,但这里没有解释)。我认为你应该在后端处理分页逻辑。

而不是       this.store.find('post'); 你应该使用

this.store.find('post', { page: variable });