8

我有Ext.grid.Panel一组列。这个网格被过滤了,根据过滤器,我想为一个列定义一个编辑器。

我的网格:

Ext.define('Mb.view.MyPanel', {
    extend: 'Ext.grid.Panel',
    columns: [
        {text: 'Order #', dataIndex: 'id'},
        {text: 'Action', dataIndex: 'type',
            renderer: function(value){
                if(value == 'BP') return Lang._('Veuillez choisir')
                 return ''
            }
        },

现在我想做类似的事情:

var panel = Mb.app.getView('MyPanel');
if (condition == true) {
    panel.getColumns[1].setEditor({
        xtype: 'textfield',
        ...
    })
}

显然该方法getColumns并不setEditor存在。因此,我需要另一种方法来激活该列上的编辑器。
我没有找到一种方法来访问列定义来修改它们并在之后重新渲染网格。

你能告诉我搜索的方向吗?谢谢。

4

1 回答 1

10

查看关于getEditor()on的文档Ext.grid.column.Column。如果您使用的是编辑插件,则该插件提供.getEditor()和. 的实现setEditor()。根据正在编辑的列和您实现的任何自定义逻辑,您可以实现自定义getEditor()方法以根据情况返回您想要的任何编辑器实例。

文档说:

getEditor( record, defaultField ) : Ext.form.field.Field

这确实说明了一小部分事实。

  • getEditor不仅是 的方法Ext.grid.column.Column,也是配置选项。
  • IfgetEditor被定义为配置选项函数 get 被称为getEditor( record )并且需要返回一个Ext.grid.CellEditor.
  • 这将适用于 cellediting 插件,但不适用于 rowediting 插件。

这是列配置的示例。它将仅在选定的行上创建一个组合框:

columns: [{
    text: 'Action', dataIndex: 'action', 
    getEditor: function(record){
        if( my logic ){
            return Ext.create('Ext.grid.CellEditor', {
                field: Ext.create( 'Ext.form.field.ComboBox', {
                    forceSelection: true,
                    store: [[1, 'Option 1'], [2, 'Option 2']]
                })
            })
        } else return false;
    }
},
于 2013-12-03T14:42:21.490 回答