如何在完成渲染后从Ext.grid.Panel获取商店数据

时间:2016-01-17 13:53:06

标签: extjs

一旦Grid完成渲染,我必须得到Grid列的数据来做出一些决定并填充一些输入框中的一些数据。但是我无法获取Grid Store。

我知道如何获取商店数据

var store = Ext.getCmp('USER_GRID').getStore();

但我很困惑,在哪里放这段代码。

将其放入网格列renderer: function(value, rowIndex, colIndex)的一种方法。

我也试过

         Ext.create( 'Ext.grid.Panel', {
            id:'USER_GRID',
            store: myStore,
            columns : [{...my columns....}]
            listeners: {
                render:function(){
                    var store = Ext.getCmp('USER_GRID').getStore();
                }
            },

但在这里我也将商店视为空白。

我也试过把它放在

tbar: [{
        xtype : 'textfield',
        id:'TOTAL_USERS',
        fieldLabel : 'Total Users',
        listeners: {
            afterrender: function(field){
                var store = Ext.getCmp('USER_GRID').getStore();
            });
        }
     }
},

这里也是空白。

你能帮忙吗?

修改 谢谢@Sergey,但我不知道为什么我的myStore方法没有afterrender。但是我在你的小提琴例子中也是如此。

我用另一种方式来满足我的要求。

dockedItems: [
  {
     xtype: 'toolbar',
     dock: 'top',
     items: [{
           xtype: 'label',
           text: 'Live Users:'
        },{
           xtype: 'displayfield',
           id: 'TOTAL_LIVE_USERS',
           value: '0'
        }
     ]
 }
],

//这是列代码。每次渲染调用后,我都会将值增加1以进行最终计数。

{text: "Licence Tpye", width: 100, dataIndex: 'licenceType', sortable: true,
        renderer: function(value, rowIndex, colIndex){
        var val = parseInt(Ext.getCmp("TOTAL_LIVE_USERS").value);

        if(value == 'Live'){
            Ext.getCmp('TOTAL_LIVE_USERS').setValue(val + 1);
        }

        return value;
    }
 }

如果是错误或正确的做法,请建议。有害吗?

1 个答案:

答案 0 :(得分:1)

由于输入框中的数据取决于商店数据,您必须监听商店加载事件(我想每次加载商店时都必须更新数据)。

在加载商店之前,您可以将这些输入框设置为已禁用,或者以其他方式显示它尚未就绪。

Simple fiddle说明如何监听商店加载事件和更新网格工具栏字段。