Gridview 间歇性组合框问题

Gridview 间歇性组合框问题,gridview,extjs,combobox,Gridview,Extjs,Combobox,我正在使用extjs4.2.1.883构建一个具有行编辑功能的网格。我已经为此挣扎了几天,尽管我确实阅读了文档并在网络上进行了广泛的搜索 目前的问题是:我的网格中的一列是这样定义的组合框: Ext.define('myapp.view.editor.MyComboBox', { extend: 'Ext.form.field.ComboBox', alias: 'widget.my-combo-box', triggerAction: 'all', query

我正在使用extjs4.2.1.883构建一个具有行编辑功能的网格。我已经为此挣扎了几天,尽管我确实阅读了文档并在网络上进行了广泛的搜索

目前的问题是:我的网格中的一列是这样定义的组合框:

Ext.define('myapp.view.editor.MyComboBox', {
    extend: 'Ext.form.field.ComboBox',
    alias:  'widget.my-combo-box',

    triggerAction: 'all',
    queryMode: 'local',
    displayField: 'ShortName',
    valueField: 'Identity',
    store: Ext.create('myapp.store.business.MyStore'),

    editable: false,
    forceSelection: true,
    emptyText: 'Select an item...',
    multiSelect: false
});
它相应的存储扩展了
Ext.data.store
,并具有
自动加载:true
。它由一个非常简单的模型支持,该模型只有三个
类型:'string'
字段,标识字段设置为
idProperty:'identity'

现在,当我双击网格中的一条记录进行编辑时,组合字段间歇性地变为空()(尽管在双击之前它有一个值);更糟糕的是,组合在那之后就不会打开了。即使我关闭然后重新打开编辑器。我断断续续地说,因为我无法可靠地再现这种行为。有时候确实如此。有时候,不管我调用了多少次行编辑,它都不会。还要注意的是,来自存储区的数据不会更改,它是一个稳定的数据集,从以前版本的系统迁移用于测试目的

昨天我看到了另一个看起来像bug的事件:组合中的第一个条目被复制了。我重新检查了后端,以确保它只发送记录的一个实例。今天,在简单地重新加载了应用程序的Web UI之后,我无法复制它,即使代码一夜之间没有改变

[编辑]我的Chrome控制台中没有错误或警告

ComboBox是否存在此类行为的正当理由?如何使其正常工作?


我还想知道迁移到更高版本的extjs4是否明智,是否明智。我对我目前使用的版本感到厌烦,主要是因为由于所有的不一致性和变通方法以及事物的巨大规模,我无法遵循开发进度(相比之下,我用于后端的Common Lisp看起来像一个十九世纪的木制玩具,而且大部分都能正常工作),但我也不愿意在项目中期切换小版本,更不用说切换框架了。

您应该将存储设置为如下字符串:

store: 'business.MyStore'
并将存储添加到控制器存储阵列。
我还启用了诸如可编辑的ore typeAhead之类的选项。只有在您离开编辑模式时,商店才会被过滤。编辑后,商店将再次被取消过滤。

我发现奇怪的一行是商店定义,我总是将商店设置为
商店:'business.MyStore'
,您能试试吗?并将商店包括在控制器的商店数组中我做了您建议的更改。将查看问题是否返回并在此处报告。为什么要显式实例化?我在两个地方读过(一本关于ExtJs的书和一本关于Web的第三方教程),共享商店可能会对过滤其内容的控件产生不期望的效果,因为过滤是由商店完成的。我敢说,实例化(也许,不确定)可能在initComponent中比在声明中做得更好,但事实上,当使用Ext.create时,组合确实可以工作,尽管,正如我所说,不是很可靠……嗯,我有很多网站都有一个组合框编辑器,其中的存储是共享的,从来没有过problems@Jans你也使用过滤吗?像
typeAhead:true
和/或
可编辑:true
?说它不应该工作(“在组合框之间共享存储”),这与我第一次使用共享存储时的经验是一致的(我想当时我试图创建一个带有组合的选择器,而不是直接使用组合,但这不会有任何区别。)