14

Ember Data RESTAdapter を使用して取得された記事のリストをページに表示しています。ブートストラップ風のページネーター ( http://twitter.github.com/bootstrap/components.html#paginationを参照) を実装する必要があり、ページ数、記事数などのページネーション データを返すための適切なパターンを見つけることができないようです。 、現在のページ、単一のリクエスト内。

たとえば、API が次のようなものを返すようにします。

{
  articles: [{...}, {...}],
  page: 3,
  article_count: 4525,
  per_page: 20
}

1 つのアイデアは、App.Paginator DS.Model を追加して、応答が次のようになるようにすることでした。

{
  articles: [{...}, {...}],
  paginator: {
    page: 3,
    article_count: 4525,
    per_page: 20
  }
}

しかし、これは些細なことのために一緒にハックするのはやり過ぎのようです。誰かがこの問題を解決したり、好きな特定のパターンを見つけたりしましたか? このようなシナリオに対応するために RESTAdapter マッピングを管理する簡単な方法はありますか?

4

2 に答える 2

4

Ember Pagination Support Mixinを使用して、次のメソッドの独自の実装を提供してみてください。すべてのコンテンツをロードする代わりに、ユーザーがページをナビゲートしているときに必要なコンテンツをフェッチできます。最初に必要なのは、レコードの合計アカウントだけです。

didRequestRange: function(rangeStart, rangeStop) {
    var content = this.get('fullContent').slice(rangeStart, rangeStop);
    this.replace(0, this.get('length'), content);
  }
于 2013-01-24T00:26:40.600 に答える
3

ember-data-beta3 を使用するmetaと、結果に -property を渡すことができます。デフォルトの RESTSerializer は、そのプロパティを探して保存します。次のようにメタデータにアクセスできます。

var meta = this.get("store").metadataFor("post");

サーバーから返された JSON を変更できない場合はextractMeta、ApplicationSerializer (またはその他のモデル固有のシリアライザー) で -hook をオーバーライドできます。

App.ApplicationSerializer = DS.RESTSerializer.extend({
  extractMeta: function(store, type, payload) {
    if (payload && payload.total) {
      store.metaForType(type, { total: payload.total });  // sets the metadata for "post"
      delete payload.total;  // keeps ember data from trying to parse "total" as a record
    }
  }
});

メタデータについて詳しくはこちら

于 2013-11-29T08:41:32.300 に答える