2

バックボーン初心者です。リスト内の各ノードが潜在的に子コレクションを持つ可能性がある、任意に深いネストされたリストがあります。例えば:

item 1
  item a
    item i
    item ii
  item b
  item c
item 2
item 3
etc

バックボーンを使用してこのデータ構造を表現する最も簡単な方法は何だろうと思っています。

それが重要な場合、構造全体を最初にロードするか、必要に応じて各レベルをロードするかを好みません。何でも簡単です。

このようなものにはやり過ぎだと感じているので、Backbone-Relational の道をたどりたくありません。

(事前に)ご協力いただきありがとうございます。

4

2 に答える 2

0

おそらくデフォルトの属性childrennew Collection(必要に応じて)に設定して、単純なモデルを作成します。主な部分は、JSON データからモデルへのロードです。

var MyModel = Backbone.Model.extend({

});
var MyCollection = Backbone.Collection.extend({
    model: MyModel,
    load: function(data) {
        for(var i in data) {
            if (_.isString(data[i])) {
                this.add(new MyModel({
                    title: data[i]
                }));
            } else {
                var collection = new MyCollection();
                collection.load(data[i]);
                this.add(new MyModel({
                    title: i,
                    children: collection
                }));
            }
        }
    }
});

var collection = new MyCollection();
collection.load({
    'item1': {
        'item a': ['item i', 'item ii'],
        0: 'item b',
        1: 'item c'
    },
    0: 'item2',
    1: 'item3'
});
console.log(collection);

この例では、「0」と「1」のキーを持つアイテムがコレクションの先頭に行くだけですが、アイデアを見ることができます。

于 2013-01-06T23:54:46.690 に答える
0

データ構造が次のようになっていると仮定します

[
  {
    title: "item 1",
    nodes: [
      {title: "item a",
        nodes: [
          {title: "item i"},
          {title: "item ii"}
        ]
      },
      {title: "item b"
      }
    ]
  },
  {
    title: "item 2"
  }
]

モデルの parse メソッドをオーバーライドすることで、階層をセットアップできます。

var Node = Backbone.Model.extend({
  parse: function(data) {
    this.nodes = new Nodes(data.nodes, {parse: true});
    return _.omit(data, 'nodes');
  }
});

var Nodes = Backbone.Collection.extend({
  model: Node
});

var c = new Nodes(data_structure, {parse: true}); 
// parse: true is only needed if you pass the data as an argument

Node.parseデータ ハッシュからプロパティを抽出nodesしてオブジェクトのカスタム属性を構築し、残りを返して Backbone が他の属性を処理できるようにします。次に、 でコレクションにアクセスしますmodel.nodes。そしてhttp://jsfiddle.net/C8HGY/で遊ぶフィドル

于 2013-01-07T15:19:50.733 に答える