我使用简单的jQuery进行自动完成,当我在本地定义jQuery中的选项列表时,它工作得很好。下面是代码(几乎直接来自jQuery站点):
<script>
jQuery(function() {
var easy = [
"one",
"two",
"three",
];
jQuery( "#tags" ).autocomplete({
source: easy
});
});
</script>
<div class="demo">
<div class="ui-widget">
<label for="tags">Tags: </label>
<input id="tags">
</div>
我想要做的是在我称为user的模型上传递这些整体,该模型具有:name和:business_name属性,并使用该模型中的条目作为选项。我是否可以将此数据传递给jQuery变量,或者是否可以通过另一种方式实现?
首先需要两个部分:
- 客户端(jQuery UI Autocomplete)
- 后台(提供数据)
你不能直接从javascript代码中查询模型,查询必须通过控制器完成。
首先,看一下jQuery自动完成文档和示例。
你看到的是结果请求将有一个名为"term"的参数,这就是你在输入字段中开始输入的内容。
请求看起来像
http://yourdomain.com/yourcontroller?term=whatyoutypejQuery想要的是一个包含JSON格式哈希值的数组,如:
[{"label": "Formatted Name to Show in List for first match", "value": 1}, {"label": "Formatted Name for Match #2", "value": 2}]
label:将显示在自动完成列表中value:当你选择一个条目(如组合框)时要使用的值
我建议创建一个名为UsersController的控制器,这样请求看起来就像 http://yourdomain.com/users?term=whatyoutypeclass UsersController < ApplicationController
def index
# general model
@users = User
# check if we should filter results
if params.has_key?(:term) && !params[:term].empty?
q = "#{params[:term]}%"
@users = @users.where("name LIKE ? OR business_name LIKE ?", q, q)
end
# only 20 entries
@users = @users.limit(20)
# respond in the right format
respond_to do |format|
# normal html layout
format.html
# json for jquery
format.json do
# make an array
@users.map! do |u|
{
:label => u.name + " / " + u.business_name,
:value => u.id
}
end
render :json => @users
end
end
end
end
现在你可以激活自动完成:
jQuery( "#tags" ).autocomplete({
source: '<%= users_path(:format => :json) %>'
});
users_path(:format => :json)
将生成类似于/users.json?term=yoursearchterm
我希望这对你有用