使用带有combo的Roweditor的ExtJS工作不正常

使用带有combo的Roweditor的ExtJS工作不正常,extjs,extjs4,Extjs,Extjs4,我有ExtJS网格。我正在使用带有combobox的Roweditor插件。当我点击网格中的任何一行时,我可以看到带有更新和取消按钮的编辑器 现在我面临的问题是,当我单击行并启用行编辑器时,如果当前显示的值与组合存储匹配,那么它应该显示为选中,但它没有显示。如果我同时使用valueField和displayField的值,那么我可以看到它被选中 editor: { allowBlank: true, selectOnFocus:true, editable:true,

我有ExtJS网格。我正在使用带有combobox的Roweditor插件。当我点击网格中的任何一行时,我可以看到带有更新和取消按钮的编辑器

现在我面临的问题是,当我单击行并启用行编辑器时,如果当前显示的值与组合存储匹配,那么它应该显示为选中,但它没有显示。如果我同时使用
valueField
displayField
的值,那么我可以看到它被选中

editor: {
    allowBlank: true,
    selectOnFocus:true,
    editable:true,
    xtype:'combobox',
    valueField:'id',
    displayField:'status',
    triggerAction:'all',
    queryMode: 'local',
    store:[['1','NOT_STARTED'],
           ['2','IN_PROGRESS'],
           ['3','COMPLETED']
    ],
    value:0,
    lazyRender: true
}
我想我不能发布图片,所以我在这里给你代码:

如果在组合的存储中同时使用
valueField
displayField
的值,则可以看到所选的值

editor: {
    allowBlank: true,
    selectOnFocus:true,
    editable:true,
    xtype:'combobox',
    valueField:'id',
    displayField:'status',
    triggerAction:'all',
    queryMode: 'local',
    store:[['NOT_STARTED','NOT_STARTED'],
           ['IN_PROGRESS','IN_PROGRESS'],
           ['COMPLETED','COMPLETED']
    ],
    value:0,
    lazyRender: true
}
当我在组合的存储中以不同的方式分配
displayField
valueField
时(这是理想的情况),它不会显示所选字段

editor: {
    allowBlank: true,
    selectOnFocus:true,
    editable:true,
    xtype:'combobox',
    valueField:'id',
    displayField:'status',
    triggerAction:'all',
    queryMode: 'local',
    store:[['1','NOT_STARTED'],
           ['2','IN_PROGRESS'],
           ['3','COMPLETED']
    ],
    value:0,
    lazyRender: true
}
请告诉我这里出了什么问题



您好,谢谢您的回复,我已经按照您的建议做了更改,但不知怎么的,它对我不起作用。这是代码。我的店是

 var data = {
            root: [
                                                {
                                                    "objectType":"com.yagna.common.domain.Project",
                                                    "objectId":"3072",
                                                    "expectedEndDate":"",
                                                    "startDate":"2011-06-27 13:06:00.0",
                                                    "name":"Milestone-11",
                                                    "actualEndDate":"",
                                                    "id":"4376",
                                                    "Status":"NOT_STARTED"
                                                }] };  

                                                                                     my Column is 

{id: 'Status',width: 20,text: 'Status',dataIndex: 'Status',filter: {type: 'combobox'},sortable: true, groupable: false,
        editor:{
                allowBlank: true,
                xtype:'combobox',
                valueField:'field1',
                displayField:'field2',
                triggerAction:'all',
                mode: 'local',
                store: [['0','NOT_STARTED'],['1','IN_PROGRESS'],['2','COMPLETED']],
                value:0,
                lazyRender: true
            } },   

                                                   Please suggest what is missing here
如果当前显示的值与组合存储匹配,则 它应显示为选中状态,但不显示“

组合框与它与
valueField
值匹配的
displayField
值不匹配

像您这样硬编码的组合框数据存储将自动将第一项(例如“1”)作为
valueField
,第二项(例如“NOT_start”)作为
displayField

因为没有一个“数字”值('1'、'2'、'3')与此列中的值匹配(“未开始”、“进行中”、“完成”),所以它不会显示任何内容

除非我理解错误,否则听起来网格数据存储本身包含的“状态”列数据(或您称之为该列的任何内容)是字符串而不是数字(即“未启动”、“正在进行”、“已完成”而不是1、2、3)

您可以做两件不同的事情:

最简单:将值字段保留为字符串,而不是数字

更难:如果出于某种(未说明)原因,您确实需要将其作为一个数字:

  • 更改网格数据存储中的数据,以便所有数据 对于此列,是数字(1,2,3),而不是字符串
  • 在此列中添加一个
    渲染器
    配置,将数字显示为 未编辑行时的适当字符串
  • 然后,按照您尝试的方式进行操作,将数据存储设置为
    [number-string]
    对象。此外,如果需要,请从您商店的报价中删除该数字 你要那样做
  • 当然,如果您已经在此列上使用了
    渲染器
    配置,那么问题可能只是引号中有数字

    希望这一切都有意义

    编辑:

    这是代码

    首先,将状态元素放在一个单独的存储中,如下所示:

    var statusStore = Ext.create('Ext.data.SimpleStore', {
        fields: ['id', 'status'],
        data : [
            ['0', 'NOT_STARTED'],
            ['1', 'IN_PROGRESS'],
            ['2', 'COMPLETED']
        ]
    });
    
    其次,将“status”的值更改为所需的数字字符串(“0”)

    第三,将渲染器添加到列配置中,并将编辑器中指定的存储更改为我们在上面创建的存储(statusStore)

    如果你成功了,别忘了在左边的支票上标出答案

    如果当前显示的值与组合存储匹配,则 它应显示为选中状态,但不显示“

    组合框与它与
    valueField
    值匹配的
    displayField
    值不匹配

    像您这样硬编码的组合框数据存储将自动将第一项(例如“1”)作为
    valueField
    ,第二项(例如“NOT_start”)作为
    displayField

    因为没有一个“数字”值('1'、'2'、'3')与此列中的值匹配(“未开始”、“进行中”、“完成”),所以它不会显示任何内容

    除非我理解错误,否则听起来网格数据存储本身包含的“状态”列数据(或您称之为该列的任何内容)是字符串而不是数字(即“未启动”、“正在进行”、“已完成”而不是1、2、3)

    您可以做两件不同的事情:

    最简单:将值字段保留为字符串,而不是数字

    更难:如果出于某种(未说明)原因,您确实需要将其作为一个数字:

  • 更改网格数据存储中的数据,以便所有数据 对于此列,是数字(1,2,3),而不是字符串
  • 在此列中添加一个
    渲染器
    配置,将数字显示为 未编辑行时的适当字符串
  • 然后,按照您尝试的方式进行操作,将数据存储设置为
    [number-string]
    对象。此外,如果需要,请从您商店的报价中删除该数字 你要那样做
  • 当然,如果您已经在此列上使用了
    渲染器
    配置,那么问题可能只是引号中有数字

    希望这一切都有意义

    编辑:

    这是代码

    首先,将状态元素放在一个单独的存储中,如下所示:

    var statusStore = Ext.create('Ext.data.SimpleStore', {
        fields: ['id', 'status'],
        data : [
            ['0', 'NOT_STARTED'],
            ['1', 'IN_PROGRESS'],
            ['2', 'COMPLETED']
        ]
    });
    
    其次,将“status”的值更改为所需的数字字符串(“0”)

    第三,将渲染器添加到列配置中,并将编辑器中指定的存储更改为我们在上面创建的存储(statusStore)


    如果你的答案是正确的,别忘了在左边的复选框上标出答案。

    您好,谢谢您的回复,我已经按照您的建议做了更改,但不知怎么的,它对我不起作用。下面是代码。根据答案,如果您希望在打开编辑器时组合与值匹配,则必须将“Status”的值更改为数字。在您上面提供的代码中,“未启动”wo