extjs更新网格的事件

时间:2012-01-14 20:19:25

标签: extjs grid

我需要在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"]
]

1 个答案:

答案 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) 

}

您可能需要调整一下,具体取决于您的商店设置方式,但应该启动它。