2012-01-14 4 views
2

Мне нужна сетка, встроенная в конструктор extjs, чтобы добавить данные в сетку на событие.extjs Событие для обновления сетки

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

Я не хочу, чтобы он вышел и обновил json-файл, не очень дружелюбный к сети.

Я сам написал серверный сервер и реализовал веб-порты для генерации события receivedMsg.

Как это сделать?

Вот где событие должно пойти:

/* 
* File: app/view/MyGridPanel.js 
* Date: Sat Jan 14 2012 14:58:07 GMT-0500 (Eastern Standard Time) 
* 
* This file was generated by Ext Designer version 1.2.2. 
* http://www.sencha.com/products/designer/ 
* 
* This file will be generated the first time you export. 
* 
* You should implement event handling and custom methods in this 
* class. 
*/ 

Ext.define('MyApp.view.MyGridPanel', { 
    extend: 'MyApp.view.ui.MyGridPanel', 

    initComponent: function() { 
     var me = this; 
     me.callParent(arguments); 
    } 
}); 


[ 
["Ace Supplies", "Emma Knauer", "555-3529"], 
["Best Goods", "Joseph Kahn", "555-8797"], 
["First Choice", "Matthew Willbanks", "555-4954"], 
["First Choice", "Matthew Willbanks", "555-4954"] 
] 

ответ

2

Если я правильно понял вопрос правильно, массив, который вы хотите добавить запись будет первым должен быть преобразован в экземпляр той же Ext.data.Model, что ваша сетка используется. Затем вы можете вызвать свой метод grid.store.insert(). Например, если ваша сетка используется модель под названием «Сотрудник», как это:

// Grid data model 
Ext.define('Employee', { 
    extend: 'Ext.data.Model', 
    fields: [ 
     {name: 'name', type: 'int'}, 
     {name: 'email', type: 'string'}, 
     {name: 'start', type: 'date'}, 
     {name: 'salary', type: 'int'}, 
     {name: 'active', type: 'bool'} 
    ] 
}); 

Вы можете создать экземпляр модели за пределами функции с вашими данными и просто передать, что в качестве функции аргументов, или если вы можете только получить данные в виде массива (надеюсь, вы можете установить последовательность), вы можете создать экземпляр модели внутри самой функции, как показано здесь:

// the function you wanted 
addRecord: function(myRecordArray) { 

    // Create a model instance 
    var r = Ext.create('Employee', { 
     name: myRecordArray[0], 
     email: myRecordArray[1], 
     start: myRecordArray[2], 
     salary: myRecordArray[3], 
     active: myRecordArray[4] 
    }); 

    // get the grid store and the number of records in it 
    var store = this.getStore(); 
    var maxIndex = store.getCount(); 

    // adds record to the end of the grid (args are: index, Ext.data.Model[]) 
    store.insert(maxIndex, r) 

} 

вы, вероятно, придется изменить это в зависимости от того, как магазин но это должно начаться.

+0

как бы я его назвал? addRecord (Array)? также из внешней функции? – BAR

+0

Вы бы назвали это из объекта MyGridPanel. Я раньше не использовал конструктор, поэтому я не уверен, как он их создает, но он должен быть чем-то вроде MyGridPanel.addRecord (Array) ... – Geronimo

+0

добавил, как данные массива будут выглядеть – BAR

Смежные вопросы