组合框作为ExtJs 4.2中的网格列。哪一个更好,更重要的是正确的方法

时间:2013-09-30 16:06:37

标签: extjs grid extjs4.2 extjs-grid

我要求列必须是网格内的组合框。

第一道 内部项目 -

items :[{width : 500,
        margin : '5 5 5 5',
        xtype : 'gridpanel',
        store :'some_store_name',
        sortableColumns : false,
        selType : 'cellmodel',
        plugins : [ {
                ptype : 'cellediting',
            clicksToEdit : 1
            } ],
        columns : [ {
                text : '<b>Column_one</b>',
                dataIndex : 'index_one',
                flex : 1
                },
                       {text : '<b>choose a value</b>',
                dataIndex : 'index_two',
                flex : 1,
                editor : {
                    xtype : 'combobox',
                    store : 'some_store_name',
                    queryMode : 'local',
                    displayField : 'label',
                    valueField : 'label'
                    }}]}]

这以正确的方式运作。唯一的问题是,用户必须单击网格才能知道它是一个组合框。我应该使用CSS并设置一个属性,说网格中的这个特定列应该像组合一样?还有其他办法吗?

第二种方式 我们可以使用渲染器函数而不是使用插件编辑器,并返回由商店强化的组合框xtype。如果我在网格中有3列,并且要求说这个组合应该在第二列,那么就有一个错误。当我单击组合时,选择一个值并移到第三列以更改文本或输入/编辑类型(文本框或某个组件)的列,组合框值消失。为什么会这样?

     { dataIndex : 'values', text : '<b>Status</b>',   xtype : 'componentcolumn',
  flex : 2,renderer : function(value) {return { name : 'some_name',store : 'some_store',    value : value,xtype : 'combobox',displayField : 'y',valueField : 'x',   queryMode : 'local'};}}}

欢迎任何建议。谢谢!

1 个答案:

答案 0 :(得分:1)

使用第一种方法是正确的。如果您希望该列也显示为可编辑,请参阅我对此SO问题的回答: How to show complete column as editable in extjs grid(cell editing)?

第二种方法不起作用的原因是组合框不依赖于它应该更新的记录数据。在初始渲染时,您通过渲染器设置具有记录值的框的默认值,但是当有人去编辑该值时,没有什么可说的:“嘿,也用这个值更新记录。”由于记录和组合框之间没有定义的绑定,因此组合框实际上不会告诉记录新值,因此当网格再次显示记录中的值时,没有要显示的更新值。