在DOJO 1.6中创建排序树?

时间:2012-10-04 14:06:23

标签: dojo

我是新手学习道场并尝试使用示例代码学习它。 使用dojo 1.6

借助示例代码,我创建了一个树

enter image description here

现在我想在root和child上应用排序。 借助此sample代码,我更改了代码

输出未排序n,但根文件夹已更改其位置,并删除子项。

Plz帮我解决这个问题。

我的代码:

dojo.require("dojo.data.ItemFileWriteStore");
dojo.require("dojo.data.ItemFileReadStore");
dojo.require("dijit.tree.ForestStoreModel");
dojo.require("dijit.Tree");
var data = [ { id: 1, name: "answerTypeLabel",                 type:'scenario',    children:[{_reference: 2}]},
                       { id: 2, name: "acceptRequestLabel",             type:'paragraph',   data: "acceptRequestLabel"},
                       { id: 3, name: "rejectRequestLabel",             type:'scenario',    children:[{_reference: 5},{_reference: 6}]},
                       { id: 4, name: "MoreInformationLabel",       type:'scenario',    children:[{_reference: 7},{_reference: 8}]},
                       { id: 5, name: "rejectRequestStatusLabel",   type:'paragraph',   data: "rejectRequestStatusLabel"},
                       { id: 6, name: "rejectRequestNotCoveredLabel", type:'paragraph',     data: "rejectRequestNotCoveredLabel" },
                       { id: 7, name: "MoreInformationDocumentLabel", type:'paragraph',     data: "MoreInformationDocumentLabel"},
                       { id: 8, name: "MoreInformationDataLabel",   type:'paragraph',   data: "MoreInformationDataLabel"}
                     ];
dojo.addOnLoad(function() {
    var sortableStore = new dojo.data.ItemFileReadStore({
        data: {
              identifier: 'id',
                        label: 'name',
                        items: data 
        }
    });
    var model = new dijit.tree.ForestStoreModel({
        rootLabel: 'Names',
        store: new dojo.data.ItemFileWriteStore({
            data: {
                identifier: 'id',
                items: [],
                label: 'name'
            }
        }) // blank itemsstore
    })
    var tree = new dijit.Tree({
        model: model,
        updateItems: function(items) {
            var self = this;
            console.log('pre', this.model.root.children);

            dojo.forEach(items, function(newItem) {
                console.log('add', newItem);
                try {
                    self.model.store.newItem({
                        id: sortableStore.getValue(newItem, 'id'),
                        name: sortableStore.getValue(newItem, 'name'),
                        type: sortableStore.getValue(newItem, 'type'),
                        data: sortableStore.getValue(newItem, 'data'),

                    });
                } catch (e) {
                    console.log(e);
                }
            });
            console.log('post', this.model.root.children);
            console.log("children: ", this.rootNode.getChildren());

        },
    });
    tree.placeAt(dojo.body());
    sortableStore.fetch({
        query: {
            type:'scenario' 
        },
        sort: [{
            attribute: "name"}],
        onComplete: function(items) {
            console.log(items, 'sorted');
            tree.updateItems(items);

        }
    })
});

输出:output of above code

1 个答案:

答案 0 :(得分:1)

设置'rootLabel'的'Names'源自你。

顺便说一句,小提琴有修改版,只是一个类似于粘贴框的功能:)

您需要使用树模型pasteItem来插入引用的项目(每个'newItem'的'children'属性)。

否则,如果你摆脱了数据的'_reference'结构,还有另一种方法。请参阅:http://jsfiddle.net/GHFdA/1/