дерево dgrid додзё, подстроки в неправильном положении

У меня есть dgrid, работающий с плагином столбца дерева. Каждый раз, когда пользователь нажимает на дерево, я вызываю сервер, перехватываю подстроки (json) и связываю их. Но когда это происходит, эти подстроки отображаются в неправильном положении, как показано на изображении ниже. Самое странное, когда я меняю нумерацию страниц, после возврата на первую страницу подстроки остаются на правильном месте.

(пожалуйста, скажите, можно ли понять мой английский, тогда я могу попытаться улучшить текст)

dgrid с неправильной позицией подстрок

Мой код dgrid:

  var CustomGrid = declare([OnDemandGrid, Keyboard, Selection, Pagination]);

    var grid = new CustomGrid({
        columns: [
            selector({label: "#", disabled: function(object){ return object.type == 'DOCx'; }}, "radio"),
            {label:'Id', field:'id', sortable: false},
            tree({label: "Title", field:"title", sortable: true, indentWidth:20, allowDuplicates:true}),
            //{label:'Title', field:'title', sortable: false},
            {label:'Count', field:'count', sortable: false}
        ],
        store: this.memoryStore,
        collapseOnRefresh:true,
        pagingLinks: false,
        pagingTextBox: true,
        firstLastArrows: true,
        pageSizeOptions: [10, 15, 25],
        selectionMode: "single", // for Selection; only select a single row at a time
        cellNavigation: false // for Keyboard; allow only row-level keyboard navigation
    }, "grid");

Мой магазин памяти:

loadMemoryStore: function(items){

            this.memoryStore = Observable(new Memory({
                data: items,
                getChildren: function(parent, options){
                    return this.query({parent: parent.id}, options);
                },
                mayHaveChildren: function(parent){
                    return (parent.count != 0) && (parent.type != 'DOC');
                }

            }));

        },

В этот момент я связываю подстроки:

        success: function(data){

            for(var i=0; i<data.report.length; i++){
                this.memoryStore.put({id:data.report[i].id, title:data.report[i].created, type:'DOC', parent:this.designId});
            }

        },

Я подумал, может быть, каждый раз, когда я привязываю подстроки, я мог бы сделать обновление сетки, может быть, это сработает. Я думаю, что пагинация делает то же самое.

Спасибо.

редактировать:

Я забыл вопрос. Ну как исправить этот баг? Если обновление в dgrid работает. Как мне это сделать? Другое дело, о чем я думал, может быть, мой getChildren неправильный, но я не мог его определить.

еще раз спасибо.


person Thiago C. S Ventura    schedule 20.11.2012    source источник
comment
Я пытаюсь, но безуспешно это работает. Не могу поверить, что ни у кого нет такого примера. Все здесь загружают свои подстроки, прежде чем загружать сетку? У вас будет больше производительности, если вы загрузите свои подэлементы после выбора пользователя. Никто?   -  person Thiago C. S Ventura    schedule 22.11.2012


Ответы (1)


Моим решением было изменение иерархии PARENT на иерархию CHILDREN. Теперь работает нормально.

Мой код dgrid:

this.mapReportItems(reportDAO.get()); 
            //this.mapReportItems(x); 
            this.loadMemoryStore(this.reportItems); 

            var CustomGrid = declare([OnDemandGrid, Keyboard, Selection, Pagination]); 

            var grid = new CustomGrid({ 
                columns: [ 
                    selector({label: "#", disabled: function(object){ return object.type == 'DOCx'; }}, "radio"), 
                    {label:'Id', field:'id', sortable: false}, 
                    tree({label: "Title", field:"title", sortable: false, indentWidth:20, shouldExpand:function() { return 0; }}), 
                    //{label:'Title', field:'title', sortable: false}, 
                    {label:'Count', field:'count', sortable: true} 
                ], 
                query: {parent: parent.children }, 
                store: this.memoryStore, 
                deselectOnRefresh: false, 
                //columnReordering:true, 
                collapseOnRefresh:false, 
                pagingLinks: false, 
                pagingTextBox: true, 
                firstLastArrows: true, 
                pageSizeOptions: [10, 15, 25], 
                selectionMode: "single", // for Selection; only select a single row at a time 
                cellNavigation: false // for Keyboard; allow only row-level keyboard navigation 
            }, "grid"); 

Мой магазин памяти:

this.memoryStore = Observable (новая память ({ data: items, getChildren: function (parent) {

            return parent.children; 
        }, 

        mayHaveChildren: function(parent){ 
            //return (parent.count != 0) && (parent.type != 'DOC'); 
            return (parent.children && parent.children.length) || (parent.count != 0 && parent.type != 'DOC'); 
        } 

    }));

В этот момент я связываю подстроки:

success: function(data){ 

                    var node = this.memoryStore.get(this.designId); 

                    for(var i=0; i<data.report.length; i++){ 
                        node.children.push({id:data.report[i].id, title:data.report[i].created, type:'DOC'}); 
                    } 

                    this.memoryStore.put(node); 
                    this.data = data; 
                }, 

Дополнительная информация. В моем случае мне нужно сопоставить мои данные Json следующим образом:

   this.reportItems = dojo.map(jsondata.reportDesign, function(report) {
                return {
                    //'@uri': report[1],
                    id : report.id,
                    title : report.title,
                    count : report.count,
                    children: [],//report.children,
                    type : report.type
                    //parent : report.parent
                };
            });

Мне пригодилась эта ссылка: https://github.com/SitePen/dgrid/issues/346< /а>

person Thiago C. S Ventura    schedule 22.11.2012