我正在尝试使用此处找到的 jquery tokeninput:http: //loopj.com/jquery-tokeninput/遵循 railcasts 的指南:http: //railscasts.com/episodes/258-token-fields
默认情况下,它需要 table/json 上的“名称”列。
有什么方法可以自定义将其更改为其他内容(在我的情况下为“account_number”)?
(在直播中,他说如果您没有“名称”列,则需要额外的自定义)
我正在尝试使用此处找到的 jquery tokeninput:http: //loopj.com/jquery-tokeninput/遵循 railcasts 的指南:http: //railscasts.com/episodes/258-token-fields
默认情况下,它需要 table/json 上的“名称”列。
有什么方法可以自定义将其更改为其他内容(在我的情况下为“account_number”)?
(在直播中,他说如果您没有“名称”列,则需要额外的自定义)
神奇的线条是
<%= f.text_field :author_tokens, "data-pre" => @book.authors.map(&:attributes).to_json %>
和
format.json { render :json => @authors.map(&:attributes) }
这些行将从表中读取的数据转换为 jquery-tokeninput 可以理解的 json。它将模型中的所有数据传递到 jquery-tokeninput 中,但这不是必需的。Tokeninput,只需要两个字段,
id
-> 对于每个选定的令牌,这与表单一起发布name
-> 用作标记的标签如果您不想name
在模型中有一个字段,并且想account_number
用作标签,您可以这样做:
<%= f.text_field :author_tokens, "data-pre" => @book.authors.collect {|author| {:id => author.id, :name => author.account_number } } %>
和
format.json { render :json => @authors.collect {|author| {:id => author.id, :name => author.account_number } }
基本上,更改传递给 tokeninput 的 json。作为. accoun_number
_name
更新:
将此行更改为更适合您的内容:
@authors = Author.where("name like ?", "%#{params[:q]}%")
一个建议可能是:
@authors = Author.where("name like ?", "#{params[:q]}%")
删除第一个%
,但实际上取决于您的数据类型和所有。
只需添加“propertyToSearch”选项:
$(function() {
$("#user_tokens").tokenInput("/users.json", {
crossDomain: false,
propertyToSearch: "account_number",
theme: "facebook",
});
});