2012-01-04 80 views
1
$("#to").autocomplete({ 

    //define callback to format results 
    source: function(req, add) { 

     //pass request to server 
     $.getJSON("friends.php?callback=?", req, function(data) { 

      //create array for response objects 
      var suggestions = []; 

      //process response 
      $.each(data, function(i, val) { 
       suggestions.push(val.name); 
      }); 

      //pass array to callback 
      add(suggestions); 
     }); 
    } 
}); 

Source這些回調駕駛我堅果

我試圖讓熟悉的自動填充功能(jQuery的用戶界面),然後我遇到

function (req, add). 

它怎麼知道req是輸入的數據?

定義的回調add在哪裏?

有人能指點我一個有用的教程,所以我可以理解如何使用這些回調?

+0

+1的問題標題。 – martincarlin87 2012-01-04 11:49:51

回答

3

它來自自動完成插件。請參閱:http://jqueryui.com/demos/autocomplete

第三種變體回調提供了最大的靈活性,可用於將任何數據源連接到自動完成。回調得到兩個參數:

  • 一個請求對象,帶有一個名爲「term」的單個屬性,它引用了當前文本輸入中的值。例如,當用戶在城市字段中輸入「新喲」時,自動完成詞將等於「新喲」。
  • 響應回調,它需要一個參數包含要提示給用戶的數據。這些數據應根據提供的術語進行過濾,並且可以採用上述任何用於簡單本地數據(String-Array或帶有標籤/值/兩個屬性的對象數組)的格式。在請求期間提供自定義源回調以處理錯誤時,這很重要。即使遇到錯誤,您也必須始終調用響應回調。這可確保小部件始終具有正確的狀態。

更新:

您提供的回調(source: function(req, add) {...})的功能是由插件調用,該插件通過對這些參數的參數。您可以自由選擇參數的名稱。您可以找到source code on Github。這是傳遞給你的回調函數中定義line 134

this.response = function() { 
    return self._response.apply(self, arguments); 
}; 

和回調稱爲line 311this.source是你的回調):

_search: function(value) { 
    this.pending++; 
    this.element.addClass("ui-autocomplete-loading"); 

    this.source({ term: value }, this.response); 
}, 
+0

我可能讀過這千多次。我似乎無法掌握響應回調。特別是「添加」方法。該功能在哪裏定義? – winteck 2012-01-04 11:42:53

+0

它由插件定義並傳遞。我會更新答案。 *更新*。 – 2012-01-04 11:45:35

+0

Kling。感謝您的所有幫助,但您如何Javascript程序員追蹤所有這些匿名方法?有什麼技巧嗎?這似乎是自殺企圖鑽研這些匿名方法。任何好的教程外面?再次感謝。 – winteck 2012-01-04 15:12:21