2011-11-24 85 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自动完成,并在此功能只需设置请求对象,并自动完成数据将充满你提供数据。