2010-03-19 51 views
2

谷歌關閉(GC)Javascript庫使得它非常容易創建自動完成用戶界面,如本演示所示 - http://closure-library.googlecode.com/svn/trunk/closure/goog/demos/autocomplete-basic.html谷歌關閉:動態設置自動完成輸入

基本上,我們所要做的就是定義一個數組並將其作爲參數之一傳遞。我希望能夠動態更新數組並使AutoComplete立即顯示更改。

實施例,如果有兩個陣列

list1 = ["One", "Two", "Three"] 
list2 = ["1", "2", "3"] 

和自動完成已使用list1的初始化,

var suggest = new goog.ui.AutoComplete.Basic(list1, document.getElementById('input'), false); 

如何可以更新已有的自動完成(建議)使用列表2?

回答

1

沒有一個公共API來做到這一點。您可以創建一個子類與改變這樣的保護matcher_變量的方法:

this.matcher_ = new goog.ui.AutoComplete.ArrayMatcher(list2, false); 

如果你想從遠程源動態更新,使用goog.ui.AutoComplete.Remote

+0

太糟糕了!太多的工作!無論如何,安妮。將看看其他一些現成的quickie解決方案。 – user297006 2010-03-19 00:51:58

+0

你可能只需要破解它 - suggest.matcher_ = new goog.ui.AutoComplete.ArrayMatcher(list2,false); – Annie 2010-03-19 00:54:09

+0

問題是可能有大約20個不同的陣列。無法爲其中的每一個創建新的AutoComplete或ArrayMatcher。 – user297006 2010-03-19 01:01:08

1

這裏是我使用是能更新的基本自動完成數組

/** 
* Set the post data for the matcher. 
* @param {string} content Post data. 
*/ 
goog.ui.AutoComplete.Basic.prototype.setContent = function(content) { 

    this.matcher_.setContent(content); 
}; 
/** 
* Set the post data. 
* @param {string} content Post data. 
*/ 
goog.ui.AutoComplete.ArrayMatcher.prototype.setContent =function(content) { 
    this.rows_ = content; 
    this.content_ = content; 
}; 

然後從你的代碼將調用suggest.setContent(myarray的),當過要更新名單

0

使用getMatcher(), 然後使用setRows(newRows)設置新的行首先得到匹配