2013-04-11 31 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