0

我刚开始学习道场,并尝试使用示例代码来学习它。使用道场 1.6

在示例代码的帮助下,我创建了一棵树

在此处输入图像描述

现在我想对根和子应用排序。在此示例代码的帮助下,我更改了代码

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

请帮我解决这个问题。

我的代码:

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);

        }
    })
});

输出 :上述代码的输出

4

1 回答 1

1

“名称”源于您设置“rootLabel”。

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

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

否则,如果您摆脱数据的“_reference”结构,还有另一种方法。见:http: //jsfiddle.net/GHFdA/1/

于 2012-10-04T18:39:31.423 回答