我花了最后三天试图解决这个问题,我希望有来自这里的人可以提供帮助。
关于设置的注意事项:我正在使用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}}
答案 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 });