2

我是Backbone的新手。我有一個任意深度的嵌套列表,列表中的每個節點都可能有一個子集合。例如:在Backbone中表示任意深度嵌套列表的最簡單方法

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

我想知道使用Backbone來表示這種數據結構的最簡單方法是什麼。

如果它很重要,我沒有首選加載整個結構,或根據需要加載每個級別。無論什麼是最簡單的。

我不想走Backbone-Relational的路線,因爲我對這樣的事情有點過度的感覺。

(提前)感謝您的幫助。

回答

0

假設你的數據結構看起來像這樣

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

,你可以通過重寫你的模型的解析方法,建立層次結構:

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/

0

我會做一個簡單的模型,也許默認屬性children設置爲new 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」鍵將收集的beggining,但你可以看到這個想法。

相關問題