2011-02-08 25 views
4

script.aculo.us中的自動完成程序預計服務器響應是<ul>列表。有什麼方法可以擴展或替換此行爲,以便它可以接受服務器響應,而不是XML或JSON文檔?如何擴展scriptaculous autocompleter?

是否還有一種方法來擴展autocompleter的渲染器,以便我可以添加頁腳到自動補全列表中?

回答

3

是的,你可以擴展script.aculo.us的自動完成器的行爲。您可以通過用處理json數據的代碼覆蓋onComplete方法併爲您創建<ul> -list來執行此操作。此清單應該發送到updateChoices

說你會檢索以下JSON響應,當你搜索「U」:

[ 
    "Unicorn", 
    "University" 
] 

於Ajax.Autocompleter的擴展,它可以處理上述反應的例子:

var MyCompleter = Class.create(Ajax.Autocompleter, { 

    initialize: function($super, id_search, id_list, url, options) { 
     $super(id_search, id_list, url, options); 
    }, 

    onComplete: function(response) { 
     var text = response.responseText; 
     if (text.isJSON()) { 
      this.handleJSON(text.evalJSON()); 
     } 
     // else do nothing 
    }, 

    handleJSON: function(json) { 
     var htmlStr = '<ul>'; 
     json.each(function(item) { 
      htmlStr += '<li>'; 
      htmlStr += item; 
      htmlStr += '</li>'; 
     }); 
     htmlStr += '</ul>'; 
     this.updateChoices(htmlStr); 
    } 

}); 

replace autocompleter's width reset behaviour也有一個例子。