我有一个具有以下配置的组合框。
{
fieldLabel:'Service',
xtype:'combo',
displayField: 'srvcDesc',
store: storeServiceCodeVar,
valueField:'srvcCD',
id:'serviceCodeId',
name:'serviceCodeName',
queryMode: 'remote',
queryDelay:100,
typeAhead: true,
minChars:0,
hideTrigger:true,
forceSelection:true,
maxHeight:23,
deferEmptyText:false,
autoSelect:true,
fieldStyle:'text-transform:uppercase',
listConfig: {
loadingText: 'Loading...',
// Custom rendering template for each item
getInnerTpl: function() {
return '<table width="200px"><tr><td height="5"></td></tr><tr valign="top"><td>Code:{srvcCD}</td></tr><tr><td height="2"></td></tr><tr valign="top"><td>Description:{srvcDesc}</td></tr><tr><td height="5"></td></tr></table>';
},
emptyText:'No Values Found'
}
}
问题是,当服务器未返回任何数据时,显示的emptyText(具有值-未找到值)的显示时间可能是毫秒,然后消失。我希望它一直待在那里直到下一次查询(如果被解雇)。这怎么可能。我尝试了deferEmptyText但没有运气。
有人可以对此有所启发。我正在使用ExtJS 4,IE9和Mozilla中的行为相同。
提前致谢。
最佳答案
从源头开始,似乎并没有引用listConfig.emptyText
用于确定是否将元素的高度设置为非零的数字。
我最终重写了Ext.form.field.ComboBox从Ext.form.field.Picker继承的alignPicker()
函数,并添加了对listConfig.emptyText
的检查。
Ext.override(Ext.form.field.ComboBox, {
alignPicker: function() {
var picker, height;
if (this.isExpanded) {
// Get the picker component.
picker = this.getPicker();
if (this.matchFieldWidth) {
// Set the default height to null, since we don't
// automatically want to have the height changed.
height = null;
// If our store exists, but the count is zero
// and we've got no emptyText defined...
if (picker.store &&
picker.store.getCount() === 0 &&
Ext.isEmpty(this.listConfig.emptyText)) {
// ...we set the height to zero.
height = 0;
}
// Set the size of the picker component.
picker.setSize(this.bodyEl.getWidth(), height);
}
if (picker.isFloating()) {
this.doAlign();
}
}
}
});
希望这可以帮助!