как перезагрузить данные gird после добавления новых данных в хранилище

У меня есть две сетки; Я называю их дочерней и родительской сеткой. Когда я добавляю новую строку (данные) в родительскую сетку, я хочу перезагрузить родительскую сетку. Я пытался отредактировать его, используя функцию afteredit в коде. Если я раскомментирую строку номер 2 в предупреждении, это будет работать нормально. Но без предупреждения новая добавленная строка скрыта. Я не понимаю, что происходит в моем коде. Пожалуйста, кто-нибудь может сказать мне, что делать после того, как я добавлю новую строку в свою сетку и как немедленно перезагрузить сетку?

это моя функция после редактирования

   afteredit : function (roweditor, changes, record, rowIndex) 
   { //alert('alert me');
      if (!roweditor.initialized) {
         roweditor.initFields();
      }
      var fields = roweditor.items.items;
      // Disable key fields if its not a new row
      Ext.each(fields, function (field, i) {
         field.setReadOnly(false);
         field.removeClass('x-item-disabled');
      });

        this.grid.getSelectionModel().selectRow(0);
        this.grid.getView().refresh();
   },


xt.ux.grid.woerp = 
{
   configRowEditor: 
   {
      saveText: "Save",
      cancelText: "Cancel",
      commitChangesText: WOERP.constants.gridCommitChanges,
      errorText: 'Errors',
      listeners: 
      {
         beforeedit: WOERP.grid.handler.beforeedit,
         validateedit: WOERP.grid.handler.validateedit,
         canceledit: WOERP.grid.handler.canceledit,
         afteredit: WOERP.grid.handler.afteredit,
         aftershow: WOERP.grid.handler.aftershow,
         move: WOERP.grid.handler.resize,
         hide: function (p) 
         {
            var mainBody = this.grid.getView().mainBody;
            if (typeof mainBody != 'undefined') 
            {
               var lastRow = Ext.fly(this.grid.getView().getRow(this.grid.getStore().getCount() - 1));
               if (lastRow != null) 
               {
                  mainBody.setHeight(lastRow.getBottom() - mainBody.getTop(), 
                  {
                     callback: function () 
                     {
                        mainBody.setHeight('auto');
                     }
                  });
               }
            }
         },
         afterlayout: WOERP.grid.handler.resize
     }
   },

person Duleep    schedule 28.11.2012    source источник
comment
Сетка предназначена только для отображения данных, она не может сохранять записи. Я предполагаю, что вы используете хранилище, связанное с сеткой. Какие методы вы используете для сохранения ваших данных?   -  person A1rPun    schedule 28.11.2012
comment
Спасибо за совет. как я могу перезагрузить после добавления новой записи в магазин. мой магазин parentStroe   -  person Duleep    schedule 28.11.2012


Ответы (3)


AFAIK RowEditor — это плагин для GridPanel, который изменяет базовые данные, поступающие из магазина. Обычно обновления также делает магазин. Если вы хотите знать, когда данные сохраняются, вы должны прикрепить обработчик событий к хранилищу. Пример:

grid.getStore().on('save', function(){ [...] });
person Krzysztof    schedule 28.11.2012

Наконец я нашел решение. Когда я добавляю функцию перезагрузки в метод afteredit, она будет скрывать вновь добавленную строку. Таким образом, перезагрузка сетки после фиксации данных в этом хранилище сетки данных работает хорошо для меня. В любом случае большое спасибо всем, кто пытается помочь

это мой код выглядит

record.commit();
grid.getView().refresh();
person Duleep    schedule 29.11.2012

Я думаю, что после редактирования сетки есть кнопка Сохранить. Таким образом, в handler раздела Сохранить вы можете поймать событие

или используя

Ext.getCmp('your_saveButtonId').on('click', function(component, e) {
   // Here they will be checking for modified records and sending them to backend to save.
   // So here also you can catch save event
}
person vajrakumar    schedule 28.11.2012
comment
да, есть кнопка сохранения, и я нахожу событие afteredit, но я пытаюсь перезагрузить сетку в функции afteredit. но когда я перезагружаю сетку в функции afteredit, которая скрывает мой новый добавленный элемент из панели сетки. Если я добавлю предупреждение в функцию afteredit, оно будет нормально работать с предупреждением. я очень новичок в extjs - person Duleep; 28.11.2012
comment
Duleep не загружает сетку после редактирования. вы теряете отредактированные данные. Они могут вызывать функцию сервера, используя ajax или какой-либо другой метод. Если ajax, то в успешном блоке этого ajax вам нужно перезагрузить сетку, чтобы новые данные были загружены в сетку, снова выполнив вызов сервера. Думаю, этот ajax будет внутри этого обработчика кнопок. - person vajrakumar; 28.11.2012