Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   GridPanel "теряет" свой store при многократном вызове экземпляров GridPanel (https://javascript.ru/forum/extjs/21408-gridpanel-teryaet-svojj-store-pri-mnogokratnom-vyzove-ehkzemplyarov-gridpanel.html)

Lokich 08.09.2011 13:09

GridPanel "теряет" свой store при многократном вызове экземпляров GridPanel
 
Здравствуйте.
я занимаюсь созданием интерфейса на ExtJs 3.3.1, в котором динамически должны отображаться PopUp окна, в которых динамически геренятся GridPanel.
т.к. весь интерфейс динамический, и все его поля, и содержимое должно генерироваться на лету, был написан специальный метод, который генерит массив со столбцами, и store для этого гридника:
getFlatGridConfiguration: function (objectId) {
        var feture = new Feature('someurl');
        var cmd = { procedure: 'GetEtalonColumnsList', args: { P_ID_OBJECT: objectId} };
        this.MDdict_Columns = feture.Execute(cmd);

        //Формируем набор столбцов
        var clmn = [];
        fld = [];
        for (i = 0; i < this.MDdict_Columns.length; i++) {
            if (this.MDdict_Columns[i].DISPLAY_SIZE == 0)
                continue;

            clmn.push({ id: 'cl' + this.MDdict_Columns[i].NM_SOURCE, header: this.MDdict_Columns[i].NM_DISPLAY, sortable: true, width: this.MDdict_Columns[i].DISPLAY_SIZE, dataIndex: this.MDdict_Columns[i].NM_SOURCE });
            fld.push(this.MDdict_Columns[i].NM_SOURCE);
        }
        //Формируем источник данных
        var ds = new TPageJsonStore();
        ds.fields = fld;
        ds.PageSize = 20;
        ds.writer = new Ext.data.JsonWriter({ fields: fld });
        ds.reader = new Ext.data.JsonReader({ fields: fld });
        ds.url = 'someurl';
        ds.loadCommand = { procedure: 'SomeProcedureName', args: { P_ID_OBJECT: objectId} };
        return { Columns: clmn, Store: ds };
    },

дело в том, что этот метод вызывается многократно, и для каждого гридника в initComponent есть строки, которые вызывают этот метод
var dictConf = getFlatGridConfiguration(this.objectId);
        this.columns = dictConf.Columns;
        this.store = dictConf.Store;


проблема в том, что после того, как я открываю еще одно окно с гридником, после работы с ним, я его закрываю, и возвращаюсь к первому, и его store = null.
сначала я подумал, что проблема в том, что они используют один и тот же TPageJsonStore, и я сделал массив из них, и использовал новый экземпляр, но это не помогло. В массиве сам store присутствует, но у гридника, store = null.

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

Ex_Soft 09.09.2011 10:12

Цитата:

Сообщение от Lokich (Сообщение 125523)
...динамически геренятся GridPanel. т.к. весь интерфейс динамический, и все его поля, и содержимое должно генерироваться на лету, был написан специальный метод, который генерит массив со столбцами, и store для этого гридника... второй день уже не знаю, как побороть данную, проблему, и с чем это связанно. может быть кто-то сможет мне с этим помочь?

С проблемой разбираться - пока рановато, IMHO... ТС предлагаю посмотреть в сторону reconfigure. Если же этот штатный функционал Вас не удовлетворит (ессесно с вменяемыми аргументами) - тогда и будем разбирать Ваш лисапет...


Часовой пояс GMT +3, время: 13:37.