2013-04-11 56 views
4

我似乎无法找到一种方法来要求过滤选择输入具有一定的长度。我试过这样:dijit filtering选择最小长度

new dijit.form.FilteringSelect({ 
    'name': 'bla', 
    'store': jsonRestStore, 
    'searchAttr': "name", 
    'pattern': '.{3,}', 
    'regExp': '.{3,}' 
}); 

但它并没有改变一件事。如果至少输入3个字符,我希望筛选选择仅查询商店。不可能是那种奇特的要求,可以吗?该商店后面有成千上万的商品,因此只用1或2个字符查询就很慢。

+0

只是一个想法。也许你可以为'onChange'添加一个事件处理程序。 – Jess 2013-04-11 13:36:42

回答

6

我做了一些更多的搜索,发现dojo邮件列表上的this post。总而言之,在FilteringSelect中无法为其提供本机支持,但实现起来非常简单。

// custom min input character count to trigger search 
minKeyCount: 3, 

// override search method, count the input length 
_startSearch: function (/*String*/key) { 
    if (!key || key.length < this.minKeyCount) { 
    this.closeDropDown(); 
    return; 
    } 
    this.inherited(arguments); 
} 

另外在API Docs,有一个searchDelay属性,在查询的数量最小化,其可能是有益的。

searchDelay 
Delay in milliseconds between when user types something and we start searching based on that value 
+0

没有看到那里。可以是一个好的解决方法,以防我的问题没有去任何地方,所以谢谢。 – DanMan 2013-04-11 16:03:28

+1

不错的解决方案。如果您将“this.inherited(arguments)”更改为“this.inherited('_ startSearch',arguments)”,那么您可以将您写入FilteringSelect的内容过滤掉,而无需创建新的窗口小部件。 – 2013-07-24 16:46:36

+0

小增加:我省略了'!key'条件,因为在我们的dojo 1.6应用程序中,它阻止了下拉打开在箭头下/点击三角形thingy – cypherabe 2013-12-18 16:15:13