2011-11-24 61 views
1

我想使用jqueryui autocmplete與amplifyjs。這就是能夠在呼叫到真實服務器數據和一些硬編碼數據之間切換,並提供額外的靈活性。自動完成與amplifyjs

現在我不知道如何使jqueryui自動完成調用放大來刷新自己並執行搜索。我有以下代碼片段:

amplify.request.define('resId', 'ajax', { 
           url: 'autocmpleteUrl', 
           dataType: "json", 
           type: "POST" 
          }); 
$(elementId).autocomplete({ 
        minLength: 1, 
        source: 'some url', 
        delay: 0, 
        focus: function (event, ui) { 
         $(elementId).val(ui.item.label); 
         return false; 
        }, 
        select: function (event, ui) { 
         $(elementId).val(ui.item.label); 
         return false; 
        } 
       }).data("autocomplete")._renderItem = function (ul, item) { 
        return $("<li></li>") 
         .data("item.autocomplete", item) 
         .append("<a>" + item.label + "</a>") 
         .appendTo(ul); 
       }; 

我知道在自動完成部分它可以是url和json數據。但我無法弄清楚如何使它處理放大,並使其如此,如果用戶輸入文本jquery自動完成請求放大,而不是網址本身。有任何想法嗎?

回答

2

這與您想要的接近,但您忘記將搜索字詞傳遞給您的請求。您的代碼應該是:

$(elem).autocomplete({ 
    source: function(request, response) { 
     amplify.request("resId", request, function(data) { 
      response(data); 
     }); 
    }); 
}); 

將發送搜索詞作爲term查詢參數。既然你做了數據的直接直通,這也可以降低:

$(elem).autocomplete({ 
    source: function(request, response) { 
     amplify.request("resId", request, response); 
    }); 
}); 

然而,在這兩種情況下,你不處理錯誤,這意味着你可以離開自動完成搜索無限期地狀態。您應該使用完整的amplify.request表單來處理錯誤:

$(elem).autocomplete({ 
    source: function(request, response) { 
     amplify.request({ 
      resourceId: "resId", 
      data: request, 
      success: response, 
      error: function() { 
       response([]); 
      } 
     }); 
    }); 
}); 
+0

謝謝Scott,詳細回覆。我知道這個錯誤,只是發佈了我的熱門代碼。對於有同樣問題的人肯定會非常有幫助。 –

1

我已經完成了以下解決方案:

autocomplete({ 
       source: function(request, response){ 
       amplify.request('resId', function(data){ 
         response(data); 
        }); 
       }, 

所以,你可以提供一個功能jquery.ui自動完成,並在此功能只需設置請求對象,並自動完成數據將充滿你提供數據。