我'm migrating my application from ExtJs 3 to 4 version. I have several comboboxes at my formPanel, and previously I'已使用hiddenName和所有stuff来提交valueField而不是displayField .
所有我的改编工作正常(值字段IS提交),但我无法设置组合框的默认值,它们在页面加载后显示为空 . 以前,我只是在config中指定'value'参数 . 有什么想法如何解决这个问题?
我的代码 - 模型和商店:
Ext.define('idNamePair', {
extend: 'Ext.data.Model',
fields: [
{name: 'id', type: 'string'},
{name: 'name', type: 'string'}
]
});
var dirValuesStore = new Ext.data.Store({
model: 'idNamePair',
proxy: {
type: 'ajax',
url: '../filtervalues.json',
reader: {
type: 'json',
root: 'dir'
}
},
autoLoad: true
});
组合配置:
{
triggerAction: 'all',
id: 'dir_id',
fieldLabel: 'Direction',
queryMode: 'local',
editable: false,
xtype: 'combo',
store : dirValuesStore,
displayField:'name',
valueField:'id',
value: 'all',
width: 250,
forceSelection:true
}
9 回答
我遇到了同样的问题,在将商品添加到商店之前,afaik与选择列表呈现有关 . 我尝试了上面提到的回调方法没有任何运气(猜测它必须是选择列表而不是商店的回调) .
我在向商店添加商品后添加了这一行,它运行正常:
将
loading: true
添加到商店配置将修复它 .autoLoad: true
和forceSelection: true
似乎有问题 . 即使负载功能还没有被解雇,这个小黑客也会让你的组合框相信商店正在加载 .执行此操作的最佳方法是侦听
afterrender
事件,然后在回调函数中设置默认值 .看到这段代码:
我注意到你的Combo配置有
queryMode: 'local'
. 该值适用于将数据本地存储在数组中的情况 . 但是你的模型使用的是AJAX代理 . 难道这会混淆Ext所以它可以't find the default value you'重新尝试设置?尝试删除queryMode
,使其默认为'remote'的值(或显式设置) .更新:在发布上述内容后,我正在将自己的应用程序从Ext3迁移到4,我遇到了完全相同的问题 . 我确定
queryMode
是其中的一部分,但主要问题是组合框没有被渲染 . 设置value
会给它一个值,但数据存储中没有任何东西可以匹配它,因此该字段显示为空白 . 我发现autoLoad
属性还可以指定在加载数据时使用的回调函数 . 这是你可以做的:您可以将逻辑直接放入回调中,也可以设置一个函数来处理所有商店 .
=====================
对于那些读取,'combo'对象上的 value config / property应该设置为某个值,以便组合框获得初始值 . 你已经这样做了 . 值'all'也需要在您的商店中将其设置为默认值 .
此外,最好为valueField config设置一个值,在调用combo.getValue()时,select侦听器将无法获得正确的值 .
我敢打赌,这与您(异步)加载组合框的时间以及设置组合框的值的时间有关 . 要解决这个问题,只需执行以下操作:
商店的自动加载已关闭 . 现在,在将ComboBox放在某个地方后 - 使用起始帖子中的代码 - 您只需手动加载商店:
dirValuesStore.load();
.这可能是在某个组件的
initComponent()
中配置Ext.apply(this, {items: [..., {xtype: 'combo', ...}, ...]})
之后 .试试这段代码:
在配置中指定'value'参数是设置组合框默认值的正确方法 .
在您的示例中,只需设置
forceSelection:false
,它就可以正常工作 .如果你想设置
forceSelection:true
,你应该确保你的商店返回的数据包含一个值等于默认值的项目(在这种情况下为'all') . 否则,默认情况下它将是一个空文本 . 为了更清楚,请用此替换您的dirValuesStore
定义:你会看到它有效!
在Extjs 5.0.1中,这应该在config组合中有效: