0

私は道場を学ぶのが初めてで、サンプルコードを使用して学ぼうとしています。Dojo 1.6 の使用

サンプルコードの助けを借りて、ツリーを作成しました

ここに画像の説明を入力

今、ルートと子にもソートを適用したいと思います。このサンプルコードの助けを借りて、コードを変更しました

出力はソートされませんが、ルート フォルダーの位置が変更され、子が削除されます。

これを解決するのを手伝ってください。

私のコード:

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 に答える