【问题标题】:ExtJS load nested JSONExtJS 加载嵌套的 JSON
【发布时间】:2014-08-22 20:12:37
【问题描述】:

我有嵌套的 json 文件。我用它来加载树形面板。问题是:当我加载树时,它会加载整个 json 文件。

{
"success": true,
"data": [{
    "id": "A",
    "name": "Parent",
    "data": [{
        "id": "Aa",
        "name": "Child",
        "data": [{
            "id": "Aaa",
            "name": "Grandchild",
            "data": [{
                "id": "Aaaa",
                "name": "Grandgrandchild",
                "leaf": true,

             }]
        }]
    }]
}]
}

因此,当我加载树时,所有商店都已加载,而当我展开文件夹时,什么都没有加载。 我希望它以不同的方式工作。我的意思是当我加载树面板时,只加载第一级商店,在这个例子中,只有父级应该加载,当我展开父文件夹时,商店加载子级,当我展开子文件夹时,它加载 GrandChild 文件夹。我需要这个,因为我有非常大的嵌套 json 文件,我不能立即加载它。

下面是我的店铺:

Ext.define('Values.store.ThisStore', {
extend: 'Ext.data.TreeStore',
model: 'Values.model.Item',

proxy: {
    type: 'rest',
    format: 'json',
    url: 'data/vg1',
    reader: {
        type: 'json',
        root: 'data'
    }
}

});

我知道做起来应该很简单,但我不知道怎么做。 期待答案,在此先感谢!

更新

我解决了这个问题,正如我所说的,它真的很简单。无论如何感谢“Sreek521”。主要思想是将一个大 json 拆分为几个小 json。我会展示它:

大 json 看起来是这样的:

{
"success": true,
"data": [{
    "id": "A",
    "name": "Parent",
    "data": [{
        "id": "Aa",
        "name": "Child",
        "data": [{
            "id": "Aaa",
            "name": "Grandchild",
            "data": [{
                "id": "Aaaa",
                "name": "Grandgrandchild",
                "leaf": true,

             }]
        }]
    }]
}]
}

它会立即加载整个文件。但如果你这样拆分:

root.json

{
    "success": true,
    "data": [{
        "id": "A",
        "name": "Parent"
    }]
}

A.json

{
   "success":true,
    "data": [{
        "id": "Aa",
         "name": "Child",
    }]
}

Aa.json

{
    "success":true,
    "data": [{
        "id": "Aaa",
         "name": "GrandChild",
    }]
}

Aaa.json

{
    "success":true,
    "data": [{
        "id": "Aaaa",
         "name": "GrandgrandChild",
         "leaf": true
    }]
}

一切正常!希望这个问题解决方案也对其他人有所帮助,因为我花了一段时间才解决它!

【问题讨论】:

    标签: javascript json extjs tree


    【解决方案1】:

    我在 try.sencha 中使用以下代码尝试了您的 JSON。 它正在按您的要求工作。下面是代码。JSOn 是您的 json 数据。请检查以下内容

    Ext.require([
        'Ext.data.*',
        'Ext.grid.*',
        'Ext.tree.*'
    ]);
    
    Ext.onReady(function() {
    
    
        var store = Ext.create('Ext.data.TreeStore', {
            fields:['id','name'],
            proxy: {
                type: 'ajax',
                //the store will get the content from the .json file
                url: 'treegrid.json',
             reader: {
                type: 'json',
                root: 'data'
        }
            }
             });
    
    
        var tree = Ext.create('Ext.tree.Panel', {
            title: 'Core Team Projects',
            width: 500,
            height: 300,
            renderTo: Ext.getBody(),
            collapsible: true,
            rootVisible: false,
            store: store,
            singleExpand: true,
    
            columns: [{
              text: 'Id',
                flex: 1,
                dataIndex: 'id',
                sortable: true
                },{
              text: 'Name',
                flex: 1,
                dataIndex: 'name',
                sortable: true
            }]
         });
    });
    

    【讨论】:

    • 感谢您的回答,但这篇文章对我没有多大帮助。我之前看到过,这个人正在尝试解决一些不同的问题。还在等待答案!
    • 更新了我的答案。请验证。
    • 我在 sencha fiddle 中用我的 Json 尝试了你的代码,它的工作原理和我的一样。加载网格时,也会加载整个商店。当我扩展文件夹时,没有数据加载,因为所有内容都已加载。这个 json 文件没有问题,但如果 json 有数千个孩子,计算机将冻结相当长的时间。 docs.sencha.com/extjs/4.2.2/#!/example/build/KitchenSink/…我需要和这个例子类似的东西,除了这个是针对xml的,而且我需要用Json,但是主要思想是一样的。
    猜你喜欢
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    相关资源
    最近更新 更多