Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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
使用DOJO对JSON进行排序并在树中显示_Dojo - Fatal编程技术网

使用DOJO对JSON进行排序并在树中显示

使用DOJO对JSON进行排序并在树中显示,dojo,Dojo,我正在学习Dojo1.6 我有数据 var data = [ { FirstName: 'xyz', Lastname: 'QSD', rollNo: '1', EntryDate: '2012-09-11T17:35:31.835+02:00' }, { FirstName: 'abc', Lastname: 'qgr', rollNo: '2', EntryDate: '2012-08-11T17:35:31.835+02:00' } { Fi

我正在学习Dojo1.6

我有数据

var data = [
        { FirstName: 'xyz', Lastname: 'QSD', rollNo: '1', EntryDate: '2012-09-11T17:35:31.835+02:00' },
        { FirstName: 'abc', Lastname: 'qgr', rollNo: '2', EntryDate: '2012-08-11T17:35:31.835+02:00' }
        { FirstName: 'ert', Lastname: 'fgd', rollNo: '3', EntryDate: '2012-18-11T17:35:31.835+02:00' }
    ];
我想根据姓氏或EntryDate对其排序,并以树格式显示

提前谢谢


多根数据

data: [
            { id: 'world', name:'The earth', type:'planet', population: '6 billion'},
            { id: 'AF', name:'Africa', type:'continent', population:'900 million', area: '30,221,532 sq km',
                    timezone: '-1 UTC to +4 UTC', parent: 'world'},
                { id: 'EG', name:'Egypt', type:'country', parent: 'AF' },
                { id: 'KE', name:'Kenya', type:'country', parent: 'AF' },
                    { id: 'Nairobi', name:'Nairobi', type:'city', parent: 'KE' },
                    { id: 'Mombasa', name:'Mombasa', type:'city', parent: 'KE' },
                { id: 'SD', name:'Sudan', type:'country', parent: 'AF' },
                    { id: 'Khartoum', name:'Khartoum', type:'city', parent: 'SD' },
            { id: 'AS', name:'Asia', type:'continent', parent: 'world' },
                { id: 'CN', name:'China', type:'country', parent: 'AS' },
                { id: 'IN', name:'India', type:'country', parent: 'AS' },
                { id: 'RU', name:'Russia', type:'country', parent: 'AS' },
                { id: 'MN', name:'Mongolia', type:'country', parent: 'AS' },
            { id: 'OC', name:'Oceania', type:'continent', population:'21 million', parent: 'world'},
            { id: 'EU', name:'Europe', type:'continent', parent: 'world' },
                { id: 'DE', name:'Germany', type:'country', parent: 'EU' },
                { id: 'FR', name:'France', type:'country', parent: 'EU' },
                { id: 'ES', name:'Spain', type:'country', parent: 'EU' },
                { id: 'IT', name:'Italy', type:'country', parent: 'EU' },
            { id: 'NA', name:'North America', type:'continent', parent: 'world' },
            { id: 'SA', name:'South America', type:'continent', parent: 'world' }
        ],

Javascript
Array
有一个本机函数,称为
sort
。这将按字母顺序对值进行现成排序。为了对非字符串值进行排序,我们需要提供排序函数。同样,关于
Lastname

data.sort(function(a,b) {
    var _A=a.Lastname.toLowerCase(), 
        _B=b.Lastname.toLowerCase();

    if (_A < _B) //sort string ascending
      return -1 
    if (_A > _B)
      return 1
    return 0 //default return value (no sorting)
});
在设置“sort”参数时,使用“store.fetch()”API可以控制返回项目的顺序。EntryDate您必须创建函数的comperatorMap,如
Array.sort()
,以便正确排序。看

好的,所有设置都已设置,但
.fetch
的问题是,它使用回调(onComplete)运行,并且很难以递归方式进行控制。相反,放入的功能会复制存储数据,然后通过本机数组排序对其进行排序,而不是使用
SimpleQueryEngine

这将被证明提供更可靠的结果-但确实会弄乱DnD控制器和持久标志

请参见商店如何对
获取返回的项目进行排序:
。但是,一次只对一个“级别”进行排序,不执行深度排序。
IMO:正确的排序实现是服务器端排序,直接在数据库查询中执行


注意:对于较大的数据集,store.deleteItem会带来一定的开销。查看setValues和/或treemodel机制以进行优化。以上是较不高级的方法,为如何利用dijit.tree旁边的读/写存储提供了一个很好的起点。当我想对根及其子项进行排序时,这将适用于多个根项。例如多个rootItems:“在编辑的部分”谢谢,我已经计算出在1个节点中进行排序,但无法对多个节点进行排序。我发布了新问题,请帮我解答。它将在任何模型设置(树或林)中工作,因为两者都有一个根。在森林模型中,它不是一个项目,而是一个“硬编码”顶级项目。调用上面的
sortableStore.fetch
时,必须只查询顶级项(root的直接同级项)。实现它的最好方法可能是在服务器端(在fetch中设置query attr)很好地实现它。。这不是一个非常简单的任务-我希望你能欣赏编辑中的细节!不过你事先就有了所有的建筑石:)享受吧
var sortableStore = new dojo.data.ItemFileReadStore({
    data: {
        identifier: 'rollNo',
        items: data
    },
    comperatorMap: {
        'EntryDate' : function(a,b) {
            var _A = new Date(a), _B = new Date(b);
            if(_A > _B) return 1;
            else if(_A == _B) return 0;
            else return -1;
        }
});
var model = new dijit.tree.ForestStoreModel({
    rootLabel: 'Names',
    store: new dojo.data.ItemFileWriteStore({
        data: {
            identifier: 'rollNo',
            items: data, 
  // blank, initially - can fill in with 'data' to show non-sorted items until sort is called
            label: 'FirstName'
        }
    }) // blank itemsstore
});

var tree = new dijit.Tree({
    model: model
});