我想在Ext.form.ComboBox中添加并清空项目(显示值为空,项目高度保持正常)。我在下面提到了2个链接来配置我的组合框,但它仍然没有显示空项:
这是我的代码:
this.abcCombo = new Ext.form.ComboBox({
name : 'abcCombo',
hiddenName : 'abcCombo-id',
fieldLabel : "My Combobox",
width : 250,
editable : false,
forceSelection : true,
mode : 'local',
triggerAction : 'all',
valueField : 'id',
displayField : 'fullName',
store : new Ext.data.JsonStore({
fields : ['id', 'fullName']
}),
tpl : '<tpl for="."><div class="x-combo-list-item">{fullName} </div></tpl>'
});
组合框存储的数据将在Ajax请求后加载(即数据项中的3项)。组合框只有3项(不是我预期的4项)。 你对我的问题有任何想法吗?! 非常感谢你!
答案 0 :(得分:14)
您可以在开头添加“空”记录:
listeners: {
load: function(store, records) {
store.insert(0, [{
fullName: ' ',
id: null
}]);
}
}
答案 1 :(得分:9)
由于您稍后添加了组合框值,为什么不使用一个空白值初始化商店:
store : new Ext.data.JsonStore({
fields : ['id', 'fullName'],
data : [{id: 0, fullName: ''}]
}),
稍后当你store.add(theRestOfThem)
时,那个空白的那个仍然在那里。
今天(2017年4月15日)为ExtJS 4.2重新审视此事:
最简单的方法是在商店中包含一个空字符串,如上所述,它也可以通过商店中的加载监听器来完成:
listeners:
{
load: function(store, records)
{
store.insert(0, [{
fullName: '',
id: null
}]);
}
}
然后在显示字段后面的tpl
将
个配置添加到组合框:
tpl: '<tpl for="."><div class="x-boundlist-item">{fullName} </div></tpl>',
(在OPs情况下显示字段为fullName
)
答案 2 :(得分:3)
这是我们在组合框中添加空白字段的方法
在java Map或任何其他集合中放置像这样的键值
fuelMap.put(""," "); // we need to add " " not ""," " or null
// because these will add a fine blank line in Combobox
// which will be hardly noticeable.
在 js文件中,它应该是这样的:
组合框的监听器
listeners: {
select: function (comp, record, index) {
if (comp.getValue() === "" || comp.getValue() === " ") {
comp.setValue(null);
}
}
}
答案 3 :(得分:3)
this.abcCombo = new Ext.form.ComboBox({
name : 'abcCombo',
hiddenName : 'abcCombo-id',
fieldLabel : "My Combobox",
width : 250,
editable : false,
forceSelection : true,
mode : 'local',
triggerAction : 'all',
valueField : 'id',
displayField : 'fullName',
store : new Ext.data.JsonStore({
fields : ['id', 'fullName']
}),
tpl : '<tpl for="."><div class="x-combo-list-item">{fullName} </div></tpl>'
//make sure to add this
//if not added, empty item height is very small
listConfig : {
getInnerTpl: function () {
return '<table><tr><td height="12">{fullName}</td></tr></table>';
}
}
});
初始化组件时,您可以执行此操作(在控制器上):
populateMyComboBox([yourComboBoxComponent], true);
填充函数:
populateMyComboBox : function(comboBox, insertEmpty) {
var list;
if (insertEmpty) {
list.push({id : 0, fullName : ''});
}
var mStore = Ext.create('Ext.data.Store', {
fields: ['data', 'label'],
data : list.concat([real_data])
}),
comboBox.bindStore(mStore);
}
答案 4 :(得分:2)
在Ext 4.2.1(可能还有其他)中,只需添加到combobox config:
tpl : '<tpl for="."><div class="x-boundlist-item">{fullName} </div></tpl>'
答案 5 :(得分:0)
如果商店使用内联数据,则store.load
甚至不会触发。也许有更好的解决方案,但我最终在combobox.render
上插入了商店记录:
{
xtype: 'combo',
displayField: 'name',
valueField: 'value',
store: {
type: 'MyInlineStore',
},
listeners: {
render: function(el){
el.getStore().insert(0, [{name: '[Any]', value: ''}]);
el.setValue(''); //select [Any] by default
}
},
}