2015-10-20 5 views
0

У меня есть сетка, которая не обновляется, когда запись помещается в его магазин.Сетка не обновляется при добавлении новой записи в его магазин

Модель:

Ext.define('S1.model.Ciot', { 
    extend: 'Ext.data.Model', 
    requires: 'S1.proxy.Ciot', 
    proxy: 'ciot', 
    associations: [ 
     { 
      type: 'belongsTo', 
      model: 'S1.model.Person', 
      associatedName: 'owner', 
      primaryKey: 'id', 
      foreignKey: 'owner_id', 
      associationKey: 'owner', 
      setterName: 'setOwner', 
      getterName: 'getOwner' 
     } 
    ], 
    fields: [ 
     {name: 'id', type: 'int', useNull: true}, 
     {name: "owner_id", type: 'int', useNull: true}, 
     {name: "number", type: 'int', useNull: true}, 
     {name: "status", type: 'int', useNull: true}, 
     {name: "product", type: 'string', useNull: true} 
    ] 
}); 

Магазин:

Ext.define('S1.store.Ciot', { 
    autoLoad: true, 
    extend: 'Ext.data.Store', 
    requires: 'S1.proxy.Ciot', 
    model: 'S1.model.Ciot', 
    proxy: 'ciot', 
    remoteSort: true, 
    remoteFilter: true, 
    remoteGroup: true, 
    pageSize: 40 
}); 

Контроллер:

Ext.define('S1.controller.Ciot', { 
    extend: 'Ext.app.Controller', 
    stores: [ 
     'Ciot' 
    ], 
    models: [ 
     'Ciot' 
    ], 
    views: [ 
     'ciot.Window', 
     'ciot.Grid', 
     'ciot.EditWindow', 
     'ciot.Form' 
    ], 
    init: function() { 
     var me = this; 
     me.control({ 
      'ciotgrid button[name=new]': { 
       click: me.onNewButtonClick 
      }, 
      'ciotgrid': { 
       itemdblclick: me.onGridItemDblClick 
      }, 
      'ciotform button[name=save]': { 
       click: me.onButtonSaveClick 
      } 
     }); 
    }, 
    onNewButtonClick: function (bt) { 
     var record = Ext.create('S1.model.Ciot'), 
      grid = bt.up('grid'); 
     this.openEditWindow(record, grid); 
    }, 
    onGridItemDblClick: function (v, record) { 
     this.openEditWindow(record, v); 
    }, 
    openEditWindow: function (record, grid) { 
     var w = Ext.create('S1.view.ciot.EditWindow'); 
     w.setGrid(grid || null); 
     w.show(); 
     w.down('form').loadRecord(record); 
    }, 
    onButtonSaveClick: function (bt) { 
     var form = bt.up('form'), 
      record = form.getRecord(); 
     if (!record) { 
      return false; 
     } 
     if (!form.getForm().isValid()) { 
      return false; 
     } 
     form.updateRecord(); 
     record.save({ 
      success: this.onSaveSuccess, 
      failure: this.onSaveFailure, 
      scope: form 
     }); 
    }, 
    onSaveSuccess: function (r, op) { 
     var w = this.up('cioteditwindow'), 
      grid = w.getGrid(), 
      rs = op.getResultSet(); 
     grid.getStore().insert(0, rs.records[0]); 
     w.close(); 
    }, 
    onSaveFailure: function (record, op) { 
     // ... 
    } 
}); 

Обратный вызов onSaveSuccess успешно добавляет новую запись в сетку, но ничего не происходит на интерфейсе.

Запись, возвращенная с сервера, в порядке.

Похоже, что сетка, которую я вставляю в новую запись, не является той же сеткой.

Что я здесь делаю неправильно?

спасибо.

ps: код был сокращен для демонстрационных целей.

+1

Вы можете написать скрипку для нас? Я вижу некоторые вещи, которые я делаю по-другому, но трудно понять, что пойдет не так :) – Tarabass

+0

Я написал для вас скрипку, и это сработало как шарм. Вот почему я нашел ошибку, спасибо. –

ответ

0

Проблема была в моей записи. В средстве рендеринга столбцов был «record.getOwner()», а свойство owner не было установлено. Я не знаю, почему этот метод не возвращал ошибку.

Сетка:

Ext.define('S1.view.ciot.Grid', { 
    extend: 'Ext.grid.Panel', 
    alias: 'widget.ciotgrid', 
    store: 'Ciot', 
    columns: [ 
     { 
      header: 'Empresa', 
      dataIndex: 'owner_id', 
      renderer: function (v, md, record) { 
       var owner = record.getOwner(); 
       if (owner instanceof S1.model.Person) { 
        v = owner.get('name'); 
       } 
       return v; 
      }, 
      flex: 1 
     }, 
     {header: 'Número', dataIndex: 'number', flex: 1}, 
     {header: 'CIOT', dataIndex: 'ciot', flex: 1}, 
     {header: 'Produto', dataIndex: 'product', flex: 1}, 
     {header: 'Status', dataIndex: 'status', flex: 1} 
    ] 
}); 
1

Попробуйте обновить сетку:

 onSaveSuccess: function (r, op) { 
      var w = this.up('cioteditwindow'), 
       grid = w.getGrid(), 
       rs = op.getResultSet(); 
      grid.getStore().insert(0, rs.records[0]); 
-->   grid.getView().refresh(); 
      w.close(); 
     }, 
Смежные вопросы