【问题标题】:Extjs4 itemId, how to get back a combobox column editorExtjs4 itemId,如何取回组合框列编辑器
【发布时间】:2012-02-22 23:42:15
【问题描述】:

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

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

我试过 grid.getComponent(itemId)、grid.headerCt.getComponent(),我不得不说这个 itemId 到底有什么用,我到底应该怎么得到这个编辑器。

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

我不得不再说一次 wtf,ExtJS 3.x 太错误了,以至于他们想修复并 f.... 修复它。

真的,这次升级让我去了很多次……也许是我的错,但是……无论如何。

{
    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');
    }
}

【问题讨论】:

  • 你试过Ext.ComponentQuery吗?试试grid.query('#item_id')
  • 是的,它返回空数组。 “[]”
  • 就是这样,只是列配置。还有更多,我不得不删除它的一些部分。

标签: extjs extjs4


【解决方案1】:
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) 可以解决问题。

【讨论】:

  • 我不知道列是混合集合还是数组或其他东西,这就是为什么我在那里有 for 循环。
【解决方案2】:

这是旧的 - 但你试过grid.down('#item_id')吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多