我需要在extjs设计器中内置一个网格,以便在事件中向网格添加数据。
所以我应该有一个函数,当使用receiveMsg作为Args调用时,发送数组数据作为网格中的新记录添加。
我不希望它出去刷新json文件,不是很友好。
我自己编写了服务器后端,并实现了websockets来生成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"]
]
答案 0 :(得分:2)
如果我正确理解了这个问题,那么您要添加为记录的数组首先必须转换为您的网格所使用的相同Ext.data.Model
的实例。然后你可以调用你的“grid.store.insert()”方法。例如,如果您的网格使用名为“Employee”的模型,请执行以下操作:
// 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'}
]
});
您可以使用您的数据在函数外部创建模型实例,并将其作为函数args传递,或者如果您只能将数据作为数组获取(希望您可以设置序列),则可以创建模型函数内部的实例,如下所示:
// 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)
}
您可能需要调整一下,具体取决于您的商店设置方式,但应该启动它。