首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于dijit.tree和dojox.grid的相同dojo.data-store

用于dijit.tree和dojox.grid的相同dojo.data-store
EN

Stack Overflow用户
提问于 2011-05-19 16:45:21
回答 2查看 911关注 0票数 0

我想实现一种文件浏览器,其中用户可以使用文件夹树导航,并在网格中查看文件夹内容。

我想对这两个小部件使用相同的数据存储,但看不到如何实现-树需要具有子属性的项,而网格只需要这些子属性。

因为可能有一个很大的数据集,所以我计划使用jsonreststore。

EN

回答 2

Stack Overflow用户

发布于 2011-06-01 17:24:34

我尝试了一下,得到了一个像这样的解决方案,请注意,网格和树使用的是同一个.。这里的问题是,如果文件夹的id为fld1,那么该文件夹下的所有文件都应该具有类似于"fld1f1","fld1f2“的id模式。

代码语言:javascript
复制
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html dir="ltr">

<head>
    <style type="text/css">
        body, html { font-family:helvetica,arial,sans-serif; font-size:90%; }
    </style>
    <script src="djlib/dojo/dojo.js" djConfig="parseOnLoad: true"></script>
    <link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/dojo/1.6/dijit/themes/claro/claro.css"/>
    <link rel="stylesheet" type="text/css" href="djlib/dojox/grid/resources/Grid.css"/>
    <link rel="stylesheet" type="text/css" href="djlib/dojox/grid/resources/claroGrid.css"/>
</head>
<body class=" claro ">
    <div id="treeOne"></div>
    <div id="gridHolder" style="height:500px"></div>
</body>
<script type="text/javascript">
    s =[];
    dojo.require("dijit.tree.ForestStoreModel");
    dojo.require("dojo.data.ItemFileReadStore");
    dojo.require("dijit.Tree");     
    dojo.require("dojox.grid.DataGrid");


    dojo.addOnLoad(function(){          
        baseStore = new dojo.data.ItemFileReadStore({
            data:{
                identifier: 'id',
                label: 'name',
                items: [                        

                    {id:'fld1',name:'folder 1', type:"folder", files:[{_reference:'fld1f1'},{_reference:'fld1f2'}]},
                    {id:'fld1f1',name:'file 1 of folder 1', type:"file", size:'1KB', dateLstMod:'15/15/2001'},
                    {id:'fld1f2',name:'file 2 of folder 1', size:'1KB', type:"file", dateLstMod:'15/15/2001'},
                    {id:'fld2',name:'folder 2', type:"folder", files:[{_reference:'fld2f1'},{_reference:'fld2f2'}]},
                    {id:'fld2f1',name:'file 1 of folder 2', size:'1KB', type:"file", dateLstMod:'15/15/2001'},
                    {id:'fld2f2',name:'file 2 of folder 2', size:'1KB', type:"file",dateLstMod:'15/15/2001'},
                    {id:'fld3',name:'folder 3', type:"folder"}
                ]
            }
        });     

        treeModel = new dijit.tree.ForestStoreModel({
            store: baseStore,
            query:{
                type:'folder'
            },
            rootId: "root",
            rootLabel: "List of folders on this drive",
            childrenAttrs:['files']
        })

        t = new dijit.Tree({
            model: treeModel                
        },"treeOne")

        dojo.connect(t,'onClick', function(item, node, evt){                
            if(node.isExpandable){
                updateGrid(baseStore.getValues(item,"id"));                 
            }
        })          
        function updateGrid(folderId){              
            grid.filter({
                type:'file' , id:folderId+'*'
            },true);
        }                   
        var gridStr = [{
            cells:[
                [
                    { field: "name", name: "File Name", width: 'auto' },
                    { field: "size", name: "Size", width: 'auto'},
                    { field: "dateLstMod", name: "Date Last Modified", width: 'auto'}                           
                ]
            ]
        }]          
        grid = new dojox.grid.DataGrid({
            store:baseStore,                
            structure: gridStr,             
            noDataMessage:"NO DATA"
        }, 'gridHolder');           
        grid.startup();
        grid.filter({
                type:'filee'
        },true);
    })      
票数 0
EN

Stack Overflow用户

发布于 2011-08-31 22:01:28

我认为这个链接有答案,您不需要将网格指向商店,而是通过迭代商店中相关的子项来创建网格并添加项目

http://groups.google.com/group/dojo-interest/browse_thread/thread/af7265b19edeeb0/9fee8b5498746dd8

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6056012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档