7

バックボーンを使用して最初の実際の Web アプリを構築していますが、ネストされたリソースに苦労しています。

これは、私が取り組んでいる json 応答の簡略化されたバージョンです。

{
  "id": 1,
  "title": "Test Survey",
  "groups": [
    {
      "id": 1,
      "title": "Basic Questions",
      "questions": [
        {
          "id": 1,
          "title": "Which is your favorite color?"
        },
        {
          "id": 2,
          "title": "Do you have any other hobbies?"
        }
      ]
    },
    {
      "id": 2,
      "title": "Working Questions",
      "questions": [
        {
          "id": 3,
          "title": "Do you think working exp is very important?"
        }
      ]
    }
  ]
}

基本的に、多くのグループを持つ調査オブジェクトがあり、各グループには多くの質問があります。

このすべてのデータをモデル/コレクションに入れる良い方法がわかりません。

私が現在持っているものは次のとおりです。

// Models
var Question = Backbone.Model.extend({});
var Group    = Backbone.Model.extend({});
var Survey   = Backbone.Model.extend({ url: surveyURL });

// Collections
var GroupsCollection    = Backbone.Collection.extend({});
var QuestionsCollection = Backbone.Collection.extend({});

//Views
var SurveyView = Backbone.View.extend({
  ..
});

var GroupsCollectionView = Backbone.View.extend({
  ..
});

var QuestionsCollectionView = Backbone.View.extent({
  ..
});

var survey = new Survey({ groups: new GroupsCollection({model: Group}) });   
var groupsView  = new GroupsCollectionView({collection: survey.get('groups')});

これは、Survey モデルでグループをネストする場合に機能するようですが、質問をコレクションに保存してから、それを Groups コレクションの各モデルに割り当てるにはどうすればよいですか?

前述のように、私はバックボーンに比較的慣れていないので、完全に間違った道を進んでいる場合、またはこれを行うためのより良い方法がある場合はお知らせください。

乾杯。

4

2 に答える 2

0

上記の答えは、私のケースでは少し重かったため、この質問に至りました。これは、検索している他のユーザーに役立つ場合があります。

4つのコレクションを作成しました。それらはコレクションに含まれていました。コレクション ビューにはさらに 4 つのコレクション ビューが含まれ、その子ビュー (単純な古いビュー) がデータをレンダリングします。

ラッピングコレクションを作成したとき

new Backbone.Collection([collectionA, collectionB, collectionC, collectionD])

返されたコレクションには 4 つのモデルが含まれており、そのすべてが Backboneモデルでした。これらのモデルに私のコレクションが含まれなくなるまでは、これで問題ありませんでした。

これは、それぞれが私の 4 つのコレクションの 1 つを含むラッピングモデルを作成することで解決されました。

var wrapperModelA = new Backbone.Model({ collection: collectionA });
...
var wrapperModelD = new Backbone.Model({ collection: collectionD }); 

return new Backbone.Collection([wrapperModelA, ... , wrapperModelD]);

これによりコレクションが保持され、新しいクラスを定義せずにネストされたコレクション構造を作成できました。

于 2017-08-01T14:59:39.743 に答える