Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 过滤存储后,ExtJS comboBox调整列表框高度_List_Extjs_Autocomplete_Combobox_Resize - Fatal编程技术网

List 过滤存储后,ExtJS comboBox调整列表框高度

List 过滤存储后,ExtJS comboBox调整列表框高度,list,extjs,autocomplete,combobox,resize,List,Extjs,Autocomplete,Combobox,Resize,我正在使用组合框进行自动完成,我想知道如何调整组合框列表的大小,以便列表的高度与列表中当前值的数量相匹配 例如,用户在框中键入“62”,自动完成功能进行ajax调用,从数据库中获取与此匹配的值。假设返回了100个值。列表的高度将是maxHeight值(300px),因为列表中的数据超过了可以容纳的范围,并且将有一个滚动条。太好了 但是用户在“62”(“623”)之后键入一个“3”,因此我过滤当前存储(100个值),并删除与“623”不匹配的任何值。假设我们剩下4个条目 问题是列表仍在扩展到300

我正在使用组合框进行自动完成,我想知道如何调整组合框列表的大小,以便列表的高度与列表中当前值的数量相匹配

例如,用户在框中键入“62”,自动完成功能进行ajax调用,从数据库中获取与此匹配的值。假设返回了100个值。列表的高度将是maxHeight值(300px),因为列表中的数据超过了可以容纳的范围,并且将有一个滚动条。太好了

但是用户在“62”(“623”)之后键入一个“3”,因此我过滤当前存储(100个值),并删除与“623”不匹配的任何值。假设我们剩下4个条目

问题是列表仍在扩展到300px,但其中只有4个值。显然没有滚动条,但我仍然希望高度缩小以适应数据,就像我从数据库中重新提取数据一样(加载新存储时它会工作)

我已经做了以下工作:

qe.combo.list.setHeight(qe.combo.maxHeight)                  
if (this.getStore().getCount() * 20 < qe.combo.list.getHeight()){
    qe.combo.list.setHeight(this.getStore().getCount() * 20)
}  
qe.combo.list.setHeight(qe.combo.maxHeight)
if(this.getStore().getCount()*20
除了在一种情况下,它似乎工作得很好。在从组合框向下打开下拉列表的任何页面上,这都非常有效

但在组合框可能位于页面底部附近的屏幕上(这会使列表在组合框上方打开),更改列表的高度会从下到上将其缩短-这意味着如果框为300px,而我将4个项目的框缩短为80px,该框将正确为80px,但组合框和列表之间现在将有220px的间隔。这有意义吗?基本上,它的缩短方式与列表位于组合框下方时相同……它没有考虑列表位于组合框上方的事实


这一次我真的很茫然,伙计们。任何帮助都将不胜感激

尝试使用combobox的config属性

listConfig:{
    maxHeight:  200// number which suits your need for list box height
}

此配置应能满足您在筛选时对动态列表高度的需求。

您使用哪个版本的Ext JS?AFAIK Ext JS以这种开箱即用的方式工作。请参阅示例:我们使用的是ExtJS 3.4,升级不是一个选项。我的示例基于3.4,因此它也适用于您。您发布的示例和我的示例之间的区别在于,您的示例使用的是本地存储,而我的示例需要“远程”。我们有10000个可以输入的值(0001到9999),所以在前面加载整个列表有点费力,我们宁愿不这样做。相反,我希望在用户第一次击键时加载存储,只加载相关数据(例如,如果用户键入“2”,则只加载2000到2999的数字)。但是在它加载这个数据之后,我希望它在当前的值内过滤自己(就像它是本地模式一样)。想法?我想补充一点,我上面描述的内容是在beforeQuery侦听器中完成的,我们使它在功能方面正常工作。也就是说,用户输入一个数字,存储检索匹配的值,然后在随后的击键时,存储正确地进行过滤。我们面临的问题是列表框的高度不能根据当前的数据量重新调整。如果列表最初有100个值,则高度将为maxHeight值(300px)。但进一步过滤后,只剩下5个值,列表高度仍为300px(即15个“空白”值)。