ExtJs: Ext.grid.Panel: Сетка обновляется автоматически и становится пустой

Я использую сетку для отображения данных на modal окно. Имеет две колонки: 1. Метка 2. TextField

Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда я вписываю что-либо в текстовое поле и теряю фокус из этого текстового поля (нажимая TAB или щелкая где-то еще), сетка полностью очищается, и я получаю пустую сетку!

Я знаю, что это как-то связано со свойством autoSync Store, связанным с сеткой. Таким образом, я установил его в false autoSync: false, После этого данные сохраняются и работают нормально.

НО, когда я закрываю это модальное окно и снова открываю его с теми же данными магазина, я получаю пустой экран!

Ниже приведен мой код:

модель

Ext.define('Ext.ux.window.visualsqlquerybuilder.SQLAttributeValueModel', {
extend: 'Ext.data.Model',
fields: [
    {
        name: 'attribute',
        type: 'string'
    },
    {   name: 'attributeValue',
        type: 'string'
    }
]
});

хранить

var attrValueStore = Ext.create('Ext.data.ArrayStore', {
   autoSync: true, //tried setting it to false but got error as mentioned above
   model: 'Ext.ux.window.visualsqlquerybuilder.SQLAttributeValueModel'
});

GRID

Ext.define('Ext.ux.window.visualsqlquerybuilder.SQLAttributeValueGrid', {
autoRender: true,
extend: 'Ext.grid.Panel',
alias: ['widget.attributevaluegrid'],
id: 'SQLAttributeValueGrid',
store: attrValueStore,
columnLines: true,
plugins: [Ext.create('Ext.grid.plugin.CellEditing', {
    clicksToEdit: 1
})],
columns: [        
    {                        /*Expression */
        xtype: 'gridcolumn',
        text: 'Attribute',
        sortable: false,
        menuDisabled: true,
        flex: 0.225,
        dataIndex: 'attribute'
    },
    {                           /*Attribute Values*/
        xtype: 'gridcolumn',
        editor: 'textfield',
        text: 'Values',
        flex: 0.225,
        dataIndex: 'attributeValue'
    }
],
initComponent: function () {
    this.callParent(arguments);
}
});

МОДАЛЬНОЕ ОКНО

var attributeValueForm = Ext.create('Ext.window.Window', {
  title:'Missing Attribute Values',
  id: 'attributeValueForm',
  height:500,
  width:400,
  modal:true,
  renderTo: Ext.getBody(),
  closeAction: 'hide',
  items:[
   {
    xtype: 'attributevaluegrid',
    border: false,
    //height: 80,
    region: 'center',
    split: true
   }
  ],
  buttons: [
  {
    id: 'OKBtn',
    itemId: 'OKBtn',
    text: 'OK',
    handler: function () {
        Ext.getCmp('attributeValueForm').close();
    }
  },
  {
    text: 'Cancel',
    handler: function () {
        Ext.getCmp('attributeValueForm').close();
    }
   }
]
});

Пожалуйста помоги. Это сводит меня с ума!

2 ответа

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

Реальная проблема заключалась в том, что я создал похожую сетку для другого модального окна, и, поскольку я скопировал код, я упустил изменение идентификатора новой сетки.

Обе сетки имели одинаковые идентификаторы.

Изменил его сейчас, и теперь он работает нормально.

Спасибо за вашу помощь!

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

Одной из причин этого может быть то, что вы прячете окно вместо того, чтобы закрывать его, а затем создаете новый экземпляр при повторном открытии. Это приведет к тому, что ваш DOM будет иметь два экземпляра Windows и может неправильно синхронизировать данные во втором экземпляре.

Еще некоторые подробности о том, как вы создаете фактическое окно, помогут пролить свет на то, так ли это.

Другие вопросы по тегам