0

我花了过去三天试图解决这个问题,我希望这里的人可以提供帮助。

关于设置的注意事项:我正在使用 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');

我不知道如何使用:来自 Ember 本身的 sortBy 或来自 firebase/emberfire 的 orderBy()?

我知道它需要位于控制器内部,该控制器将在将模型中的数据显示在视图中之前对其进行修改。但是有人可以帮忙吗?

继承人一些更多的代码:

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

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}}
4

2 回答 2

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();
    }
});

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

于 2015-10-28T04:09:27.017 回答
1

既然您说您的帖子数组已经订购但方式错误。你可以使用Array.prototype.reverse();

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

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

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

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

this.store.find('post', { page: variable });
于 2015-10-28T07:35:24.473 回答