Замена содержимого магазина в Ext JS - PullRequest
2 голосов
/ 31 октября 2011

Мне нужно подобрать Ext JS для проекта, над которым я работаю, и тут возникла простая проблема, которую я не могу понять:

Вот мой код:

var arrayData = [
    ['Jay Gar','MD'],
    ['Aaron Baker','CA'],
    ['Susan Smith','NY'],
    ['Mary Stein','KT'],
    ['John Zalupic','WA'],
];

var store = Ext.create('Ext.data.ArrayStore',{
    data: arrayData,
    fields: ['personName', 'state']
});

var grid = Ext.create('Ext.grid.Panel', {
    title: 'first grid',
    renderTo: Ext.getBody(),
    authoHeight:true,
    width: 250,
    store: store,
    autoScroll: true,
    columns: [
        { header: 'name', dataIndex: 'personName' },
        { header: 'st', dataIndex: 'state', sortable: false }
    ]
});

grid.getSelectionModel().on('selectionchange', function(sm, selectedRecord){
    var newData = [
        ['Poka Boka', 'VK'],
        ['Choko Mok', 'CA']
    ];      

    store.removeAll();
    store.add(newData);    
});       

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

Когда я нажимаю на любой элемент, значения newData мигают под данными, которые он собирается заменить, и по какой-то причине он отображает 3 строки: первую, вторую, а затем снова первую. Кроме того, я получаю сообщение об ошибке «Uncaught TypeError: Невозможно прочитать свойство« internalId »undefined», возникающее в этой строке: store.add (newData).

Есть идеи, что может быть причиной? Я использую Ext JS 4. Спасибо! Luka

1 Ответ

1 голос
/ 01 ноября 2011

Метод add ожидает записи, и вы передаете массив.Вы должны создать экземпляр типа записи вашего магазина и выполнить итерацию, чтобы создать столько записей, сколько вам нужно, а затем добавить их в хранилище.

Вот пример:

var store=this.getStore();       
    var rt = store.recordType;
    var p = new rt({
        InvoiceLineNum: '',
        LineNumber:'',
        ItemDescription: '',
        Quantity: '',
        UnitPrice: '',
        UnitMeasure:'',
        TotalAmount:'',
        OrderDate:new Date()

    });

    this.stopEditing();
    store.insert(count, p);
    this.startEditing(count, 0);
    this.markEditableCells(count);

Я используювставка здесь, но вы также можете использовать добавление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...