Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 表示主干中任意深度嵌套列表的最简单方法_Javascript_Jquery_Backbone.js_Hierarchical Data_Nested Lists - Fatal编程技术网

Javascript 表示主干中任意深度嵌套列表的最简单方法

Javascript 表示主干中任意深度嵌套列表的最简单方法,javascript,jquery,backbone.js,hierarchical-data,nested-lists,Javascript,Jquery,Backbone.js,Hierarchical Data,Nested Lists,我是个新手。我有一个任意深度的嵌套列表,其中列表中的每个节点都可能有一个子集合。例如: item 1 item a item i item ii item b item c item 2 item 3 etc 我想知道用主干表示这种数据结构最简单的方法是什么 如果重要的话,我不喜欢一开始就加载整个结构,或者根据需要加载每个级别。最简单的 我不想走骨干关系的道路,因为我觉得这样做太过分了 (提前)感谢您的帮助。我会制作一个简单的模型,可能会将默认属性children设

我是个新手。我有一个任意深度的嵌套列表,其中列表中的每个节点都可能有一个子集合。例如:

item 1
  item a
    item i
    item ii
  item b
  item c
item 2
item 3
etc
我想知道用主干表示这种数据结构最简单的方法是什么

如果重要的话,我不喜欢一开始就加载整个结构,或者根据需要加载每个级别。最简单的

我不想走骨干关系的道路,因为我觉得这样做太过分了


(提前)感谢您的帮助。

我会制作一个简单的模型,可能会将默认属性
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”键的项才会进入集合,但您可以看到这个想法。

假设您的数据结构如下所示

[
{
标题:“项目1”,
节点:[
{标题:“项目a”,
节点:[
{标题:“项目一”},
{标题:“项目二”}
]
},
{标题:“项目b”
}
]
},
{
标题:“项目2”
}
]
您可以通过覆盖模型的解析方法来设置层次结构:

var Node=Backbone.Model.extend({
解析:函数(数据){
this.nodes=新节点(data.nodes,{parse:true});
返回u.omit(数据,'nodes');
}
});
var Nodes=Backbone.Collection.extend({
模型:节点
});
var c=新节点(数据结构,{parse:true});
//parse:只有在将数据作为参数传递时才需要true
Node.parse
从数据散列中提取
nodes
属性,在对象上构建自定义属性,然后返回其余属性,让主干处理其他属性。然后使用
model.nodes
访问集合。还有一把小提琴