extjs gridpanel: ColumnModel становится нулевым, когда окно GridPanel снова отображается - PullRequest
0 голосов
/ 21 ноября 2011

Я определил GridPanel с предварительно сконфигурированными ColumnModel и Store и поместил эту GridPanel в Ext.Window;Это работает нормально, когда это окно показывает, однако, если я закрою его и покажу снова, ColumnModel из GridPanel обнуляется, так что эта GridPanel не может правильно отрисоваться.

ОБНОВЛЕНО (весь код)

 var stSummary = new Ext.data.JsonStore({ //define the store for Summary_Grid
        fields : [
        {
            name: 'recID'
        }, {
            name : 'name',
        }],
        data: []
    });

var colModelSummary = { //define the ColumnModel for Summary_Grid
    columns:
    [
        {
            header : "ID",
            width : 50,
            sortable : true,
            menuDisabled: true,
            dataIndex : 'recID'
        },
        {
            header : "Name",
            width : 100,
            sortable : true,
            menuDisabled: true,
            dataIndex : 'name'
        }
    ]
};

var reportConfig = {
    id : 'Report_Window',
    width : 250,
    floating : true,
    style : {
        opacity : 0.7,
    },
    title : "Report",
    layout: 'fit',
    items : [{
        xtype: 'tabpanel',
        id: 'Report_Tab',
        height: 200,
        activeTab: 1,
        items: 
        [
            {
                xtype : 'grid',
                store : stSummary,
                colModel : new Ext.grid.ColumnModel(colModelSummary),
                stripeRows : true,
                id : "Summary_Grid",
                title : "Summary at",
                sm : new Ext.grid.RowSelectionModel({
                    singleSelect : true
                }),
                listeners: {
                    'beforerender': function() {
                        console.log(this.getColumnModel().getColumnCount());
                    }
                }
            }, 
            {
                xtype : 'form',
                id : 'Report_Form',
                title: 'Item Report',
                frame : true,
                labelAlign : 'left',
                bodyStyle : 'padding:2px',
                autoScroll: true,
                layout : 'column',
                items : []  
            }
        ]
    }],
    resizable : {
        dynamic : true
    }
};
var reportWindow = new Ext.Window(reportConfig);

reportWindow.show();

document.onclick = myClickHandler;


    function myClickHandler() {
      if(!Ext.getCmp('Report_Window')) {
        var reportWindow = new Ext.Window(reportConfig);
      }

      Ext.getCmp('Report_Window').show();
    }
});

и ошибка:

Uncaught TypeError: Cannot read property 'length' of undefined
Ext.grid.ColumnModel.Ext.extend.getColumnCount                  ext-all.js:11

1 Ответ

0 голосов
/ 22 ноября 2011

Я просто скопировал и вставил ваш код в мое приложение. Я добавил reportWindow.show () в конце - и это работает! Не уверен, что может быть не так, вы можете показать весь код?

Обратите внимание, что это может быть проблема закрытия / скрытия, вы каждый раз заново создаете окно?

EDIT:

Попробуйте установить closeAction: 'hide' в вашей конфигурации окна.

Проверьте это для деталей:

http://docs.sencha.com/ext-js/3-4/#!/api/Ext.Window-cfg-closeAction

РЕДАКТИРОВАНИЕ № 2:

Я снова проверил ваш код, и он снова работает! Я исправил только несколько вещей, таких как лишние запятые - мой резарпер предложил это. (Это может вызвать проблемы в IE) Затем я поместил его в Ext.onReady - он работает! Ext.version == '3.2.1'

Проверьте весь код:

Ext.onReady(function() {
    var stSummary = new Ext.data.JsonStore({
//define the store for Summary_Grid
            fields: [
                {
                    name: 'recID'
                }, {
                    name: 'name'
                }],
            data: []
        });

    var colModelSummary = {
//define the ColumnModel for Summary_Grid
        columns:
            [
                {
                    header: "ID",
                    width: 50,
                    sortable: true,
                    menuDisabled: true,
                    dataIndex: 'recID'
                },
                {
                    header: "Name",
                    width: 100,
                    sortable: true,
                    menuDisabled: true,
                    dataIndex: 'name'
                }
            ]
    };

    var reportConfig = {
        id: 'Report_Window',
        width: 250,
        floating: true,
        style: {
            opacity: 0.7
        },
        title: "Report",
        layout: 'fit',
        items: [{
            xtype: 'tabpanel',
            id: 'Report_Tab',
            height: 200,
            activeTab: 1,
            items:
                [
                    {
                        xtype: 'grid',
                        store: stSummary,
                        colModel: new Ext.grid.ColumnModel(colModelSummary),
                        stripeRows: true,
                        id: "Summary_Grid",
                        title: "Summary at",
                        sm: new Ext.grid.RowSelectionModel({
                            singleSelect: true
                        }),
                        listeners: {
                            'beforerender': function() {
                                console.log(this.getColumnModel().getColumnCount());
                            }
                        }
                    },
                    {
                        xtype: 'form',
                        id: 'Report_Form',
                        title: 'Item Report',
                        frame: true,
                        labelAlign: 'left',
                        bodyStyle: 'padding:2px',
                        autoScroll: true,
                        layout: 'column',
                        items: []
                    }
                ]
        }],
        resizable: {
            dynamic: true
        }
    };
    var reportWindow = new Ext.Window(reportConfig);

    reportWindow.show();

    document.onclick = myClickHandler;


    function myClickHandler() {
        if (!Ext.getCmp('Report_Window')) {
            reportWindow = new Ext.Window(reportConfig);
        }

        Ext.getCmp('Report_Window').show();
    }
});
...