0

私はこれを理解しようと過去 3 日間を費やしてきました。ここの誰かが助けてくれることを願っています。

セットアップに関する注意: 私は Ember-Cli で作業しているため、Ember バージョン 1.13.7 と Ember-Data 1.13.8 を使用しています。

emberJS がどのように機能するかについて詳しく知るために、自分の Web サイトで使用する簡単なブログ システムを作成することにしました。データは、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 に答える