我有一个具有以下配置的组合框。

{
    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();
            }
        }
    }

});


希望这可以帮助!

08-18 13:07