Extjs4 itemId,如何取回组合框列编辑器

时间:2012-01-31 08:20:59

标签: extjs extjs4

我正在尝试将一些ExtJS 3.3转换为4.0。 在ExtJS 3.x中,我可以使用独特的组件ID创建一个组合框,稍后我可以使用Ext.getCmp(Id)来获取该组合编辑器,以便我可以添加过滤器,或者使用组合框本身。

现在,如果我指定一个Id,网格不会在网格中渲染组合框正确,他们说我必须使用itemId,然后实际上它工作,我的意思是组合在网格上正确渲染,但后来我有无法使用该itemId获取组合框本身。

我试过grid.getComponent(itemId),grid.headerCt.getComponent(),我不得不说这个项目到底有什么好处,我到底该如何得到这个编辑器。

grid.columns集合包含简单字段的编辑器(如文本,数字),对于组合框,它有getEditor,它要求将数据记录作为参数。

我不得不再说wtf,对于ExtJS 3.x是如此错误,以至于他们感觉像是在修理它们....它起来了。

真的,这次升级让我去了很多次......也许是我的错,但是wtf ......反正。

{
    header: 'Ürün/Hizmet',
    width: 90,
    dataIndex: 'AlinanHizmetId',
    editor: {
        itemId: 'AlinanHizmetId',
        xtype: 'combobox',
        allowBlank: false,
        selectOnFocus: true,
        valueField: 'Id',
        displayField: 'HizmetAd',
        triggerAction: 'all',
        typeAhead: false,
        forceSelection: true,
        lazyRender: true,
        minChars: '2',
        listWidth: 300,
        store: Ext.create('Ext.data.Store', {
            storeId: '',
            fields: [{
                name: 'HizmetTipAd',
                caption: 'Hizmet Tip Adı',
                type: Ext.data.Types.STRING,
                clrType: 'String'
            }, {
                name: 'Id',
                caption: 'Id',
                type: Ext.data.Types.STRING,
                clrType: 'Guid'
            }, {
                name: 'HizmetTip',
                caption: 'HizmetTip',
                type: Ext.data.Types.STRING,
                clrType: 'String'
            }, {
                name: 'HizmetKod',
                caption: 'Hizmet Kodu',
                type: Ext.data.Types.STRING,
                clrType: 'String'
            }, {
                name: 'HizmetAd',
                caption: 'Hizmet Adı',
                type: Ext.data.Types.STRING,
                clrType: 'String'
            }, {
                name: 'Aciklama',
                caption: 'Açıklama',
                type: Ext.data.Types.STRING,
                clrType: 'String'
            }],
            autoDestroy: false,
            autoLoad: true,
            autoSave: false,
            sortInfo: {
                field: 'HizmetAd',
                direction: 'ASC'
            },
            restful: false,
            proxy: {
                type: 'ajax',
                actionMethods: {
                    read: 'POST'
                },
                url: '/Yol/Combo/AlinanHizmet',
                reader: {
                    type: 'json',
                    root: 'data',
                    idProperty: 'Id',
                    totalProperty: 'rowCount',
                    successProperty: 'success',
                    messageProperty: 'message'
                }
            },
            data: []
        })
    },
    filter: {
        xtype: 'textfield'
    },
    renderer: function (value, metaData, record, rowIndex, colIndex, store) {
        return record.get('HizmetAd');
    }
}

2 个答案:

答案 0 :(得分:0)

这已经过时了 - 但你试过grid.down('#item_id')吗?

答案 1 :(得分:0)

mygrid.on('beforeedit', function(e){
    if(e.field == 'ProductId') {
      var gridCols = Ext.getCmp('my_grid').columns;
      for(i = 0; i < gridCols.length; i++)
          if (gridCols[i].dataIndex == 'ProductId') break;
      var combo = gridCols[i].getEditor(e.record);
    ...

所以实际上column.getEditor(null)就可以了。