我有一個應用程序,我有多個搜索源。以前,用戶必須在搜索之前選擇搜索的來源。如果他們沒有選擇,應用程序將默認爲其中一個選項。追加新的結果到開放的jQuery自動完成菜單
但是,現在他們想要同時搜索所有來源。這很好,但問題是當其中一個搜索返回時,它將覆蓋以前的搜索結果。相當多預期的行爲。我基本想要的是追加新的結果到已經打開的自動完成菜單,而不是覆蓋舊的結果。自然,自動完成菜單在關閉時必須清空。
我想這是可能的,但最好的方法是什麼?我可以有一個數組我猜,我追加結果,然後覆蓋_renderMenu使用此數組,而不是傳遞給函數的項。然後在關閉事件中清空所述數組。
這是最好的方式嗎?還是有更優雅的解決方案?
部分代碼: 好的,所以searchAction最終由jquery自動完成調用。在collection.search中,我執行ajax調用,這裏的URL基於這個參數創建,然後調用respondWhithData並將搜索結果映射爲適當的格式(即自動完成菜單的值和標籤)。在從respondWithData調用響應之後,jquery會自動呈現結果菜單。因此,我可能必須覆蓋reponse事件函數以及_renderMenu和可能的_renderItem,是的?
searchAction: function(searchTerm, collection, response){
var self = this;
$.when(collection.search(searchTerm, this)).then(function(data) {
self.respondWithData(data, response);
});
},
respondWithData : function(data, response) {
if (data.length > 0) {
var responseVal = _.map(data, this.mapData);
this.checkResponseCount(responseVal);
response(responseVal);
}
else {
response(this.emptyResult());
}
},
要清楚,問題不在於多重搜索本身,而在於渲染異步結果。我想呈現返回的第一個結果,然後在從服務器返回時立即追加其餘結果。
編輯2: 只是試圖在autocompleteresponse事件編輯ui.content,但一旦它呈現爲某種原因,任何編輯不走......
編輯3:啊,ui.content只能是直接修改,沒有改變。如果我推動每一個變化,而不是拼湊兩個數組,ui.content顯示我想要的。 它的作品我猜,但它不完美。
請添加對搜索後的一些代碼回 – Balder 2014-10-03 09:01:45
做,但我不是很確定它如何幫助:) – benbjo 2014-10-03 10:04:06
你能告訴我們哪些jQuery的自動完成你使用的插件?那裏有很多Autocomplete插件。 – 2014-10-03 10:58:06