0

数日間チュートリアルを読み、Google を検索した後、私は壁にぶつかりました...

アイテムを表示するためのさまざまなビューを持つアイテム モデル/アイテム コレクションを持つ backbone.js を使用してアプリを作成しています。アプリの一部では、ユーザーがグループを作成 (および既存のグループを使用) して、アイテム コレクションのサブセットを表示できます。

グループを表示し、ユーザーがアイテムを特定のグループに関連付けることができるようにするさまざまなビューを備えたグループ モデル/グループ コレクションがあります。

問題は、各アイテムが 1 つまたは複数のグループに属するか、またはグループに属さない可能性があり、グループ モデルを使用して、関連付けられているアイテムに基づいてアイテム コレクションのサブセットを取得する方法を理解できないことです。それについて行く正しい方法。

どんな助けでも本当に感謝します!

4

1 に答える 1

3

実際に持っているモデルの数、それらを保存する場所、およびUIでのレンダリング方法に応じて、これにどのように取り組むかによって異なります。

リモートサーバー上のデータベースに保存されているモデルが多数あり、グループのアイテムが個別にレンダリングされる場合、1つの方法は、グループのアイテムをオンデマンドでロードすることです。多分...のようなもの

var Item = Backbone.Model.extend({});
var ItemColleciton = Backbone.Collection.extend({
  url: '/load-items',
});

var Group = Backbone.Model.extend({
  items: new ItemCollection(),
  initialize: function() {
    // load the groups items as the group is initialized
    this.items.fetch({data:{groupID:this.id}});
  }
});

または、モデルの数が少ない場合は、モデルを一度にすべてロードし、フィルタリングを使用してグループにデータを入力することをお勧めします。このようなもの ...

var Item = Backbone.Model.extend({});
var ItemColleciton = Backbone.Collection.extend({
  url: '/load-groups',
});

var Group = Backbone.Model.extend({
  initialize: function() {
    // load the groups items as a subset of the already loaded group collection
    this.items = new ItemCollection(allItems.filter(function(item) {
      return item.GroupID = this.id;
    }, this));
  }
});

// in your router init ...
var allItems = new ItemCollection();
allItems.fetch();

上記は単なる例のアプローチです。バックボーンをしばらく使用した後に私が見つけたのは、バックボーンは本当に解釈にオープンであり、さまざまな問題を解決するためにまったく異なる方法で実装できるということです。

また、バックボーンリレーショナルを確認することもできます。私自身は使用していませんが、モデルとコレクション間のマッピング関係のサポートが追加されたと思います。

于 2012-04-19T20:38:47.237 に答える