2011-03-23 24 views
0

我的目標是建立一個基於當前輸入從SQL數據庫中提取的自動完成元素。這是必要的,因爲被搜索的元素數量遠遠超過了json解串器的最大容量。jQuery UI自動完成與deferred.promise()不兼容?

我有這個smartAutoComplete插件工作,但我想鞏固和使用jQuery UI自動完成插件。看起來,插件在我的源代碼函數返回任何內容之前調用._renderMenu,並且沒有任何內容被添加到頁面主體。我在使用smartAutoComplete時使用deferred.promise()修復了這個問題,但jQuery UI似乎並不喜歡這個解決方案。有小費嗎?謝謝!

$("input#punch_box").autocomplete({ 
    source: function (request, response) { 
     var dfd = new jQuery.Deferred(); 
     var resArr = []; 
     MyAjax({ 
      url: '../GetMemberFiltered', 
      data: { search_string: request.term }, 
      success: function (data, status) { 
       $(data).each(function (indx, result) { 
        resArr.push({ value: result.first_name + " " + result.last_name + " " + result.email, 
         member_id: result.member_id 
        }); 
       }); 
       dfd.resolve(resArr); 
      } 
     }); 
     return dfd.promise(); 
    }, 
    delay: 200 
}); 

function monkeyPatchAutocomplete() { 
    var oldFn = $.ui.autocomplete.prototype._renderItem; 

    $.ui.autocomplete.prototype._renderItem = function (ul, item) { 
     alert(item.value); 
     return $("<li></li>") 
      .data("item.autocomplete", item) 
      .append("<a>" + item.value + "</a>") 
      .appendTo(ul); 
    }; 
}; 

回答