jquery.Tokeninput 在 Rails 3.0.9 中具有动态嵌套表单
我试图在我的表单应用程序中使用 jquery Tokeninput 插件来自动完成pouporse。
问题是,在我的java脚本中,上下文ID是动态生成的,所以我不知道如何指定它工作,即使我在视图字段中使用参数:id,它也不会被识别。
我尝试将其与单个非动态字段一起使用并且工作得很好。 问题出在编辑视图上。 当我进行编辑时,每个字段都会显示该项目的所有结果。
因此,如果我有 3 个字段,则 3 个字段将显示所有 3 个项目。
我涉及的视图是
/views/comps/new.html.erb
<h1>Cadastrar nova composicao:</h1>
<%= form_for(@comp) do |f| %>
<%= render 'fields', :f => f %>
<div class="actions">
<%= f.submit "Salvar" %>
</div>
<% end %>
/views/comps/_fields.html.erb
<%= render 'shared/error_messages', :object => f.object %>
<br>
<table class="field">
<tr>
<td><%= f.label :nome, "Nome" %></td>
<td><%= f.text_field :nome %></td>
<td><%= f.label :projetoorigem_id, "Projeto de origem" %></td>
<td><%= f.text_field :projetoorigem_id %></td>
</tr>
<tr>
<td><%= f.label :user_id, "Autor" %></td>
<td><%= f.text_field :user_id %></td>
<td><%= f.label :unidade_id, "Unidade" %></td>
<td><%= f.text_field :unidade_id %></td>
</tr>
<tr>
<td><%= f.label :tipo, "Tipo" %></td>
<td><%= f.text_field :tipo %></td>
<td><%= f.label :valor, "Valor" %></td>
<td><%= f.text_field :valor %></td>
</tr>
</table>
<div id="add" class="none">
Insumos da composicao
</br>
<ol>
<div>
<%= link_to_add_fields (image_tag "add.jpg"), f, :insumos_comp_rels %>
<%= f.fields_for :insumos_comp_rels do |builder| %>
<%= render "insumos_comp_rel_fields", :f => builder %>
<% end %>
</div>
</div>
</ol>
/views/comps/_insumos_comp_rel_fields.html/erb
<li class="fields">
<%= link_to_remove_fields (image_tag "delete.jpg"), f %>
<%= f.text_field :insumo_id, :id => "insumo_id" %>
<%= f.collection_select(:clifor_id, Clifor.all, :id, :nome_fantasia)%>
<%= f.collection_select(:modelo_id, Modelo.all, :id, :nome)%>
<%= f.collection_select(:unidade_id, Unidade.all, :id, :simbolo)%>
<%= f.text_field :valor %>
<%= f.text_field :quantidade %>
</li>
jQuery 文件是:
/application.js
function remove_fields(link) {
$(link).prev("input[type=hidden]").val("1");
$(link).closest(".fields").hide();
}
function add_fields(link, association, content) {
var new_id = new Date().getTime();
var regexp = new RegExp("new_" + association, "g")
$(link).parent().after(content.replace(regexp, new_id));
}
$(function(){
$("#insumo_id", $(this)).tokenInput("/insumos.json", {
propertyToSearch: "nome",
tokenLimit: 1,
theme: "facebook",
searchingText: "Procurando...",
hintText: "Digite o que deseja procurar"
});
})
任何想法都会非常感激。
im trying to use the jquery Tokeninput plugin for autocomplete pouporse in my form application.
the thing is, in my java script the context ID is dinamically generate, so i dont know how to specify it to work, and even if i use the paremeter :id in the view field it is not identifyed.
I tryed to use this with a single not dynamic field and worked just fine.
The problem is with the edit view.
When i come to edit, every field shows all results for that item.
So if i have 3 field, the 3 display all the 3 itens.
my views involved are
/views/comps/new.html.erb
<h1>Cadastrar nova composicao:</h1>
<%= form_for(@comp) do |f| %>
<%= render 'fields', :f => f %>
<div class="actions">
<%= f.submit "Salvar" %>
</div>
<% end %>
/views/comps/_fields.html.erb
<%= render 'shared/error_messages', :object => f.object %>
<br>
<table class="field">
<tr>
<td><%= f.label :nome, "Nome" %></td>
<td><%= f.text_field :nome %></td>
<td><%= f.label :projetoorigem_id, "Projeto de origem" %></td>
<td><%= f.text_field :projetoorigem_id %></td>
</tr>
<tr>
<td><%= f.label :user_id, "Autor" %></td>
<td><%= f.text_field :user_id %></td>
<td><%= f.label :unidade_id, "Unidade" %></td>
<td><%= f.text_field :unidade_id %></td>
</tr>
<tr>
<td><%= f.label :tipo, "Tipo" %></td>
<td><%= f.text_field :tipo %></td>
<td><%= f.label :valor, "Valor" %></td>
<td><%= f.text_field :valor %></td>
</tr>
</table>
<div id="add" class="none">
Insumos da composicao
</br>
<ol>
<div>
<%= link_to_add_fields (image_tag "add.jpg"), f, :insumos_comp_rels %>
<%= f.fields_for :insumos_comp_rels do |builder| %>
<%= render "insumos_comp_rel_fields", :f => builder %>
<% end %>
</div>
</div>
</ol>
/views/comps/_insumos_comp_rel_fields.html/erb
<li class="fields">
<%= link_to_remove_fields (image_tag "delete.jpg"), f %>
<%= f.text_field :insumo_id, :id => "insumo_id" %>
<%= f.collection_select(:clifor_id, Clifor.all, :id, :nome_fantasia)%>
<%= f.collection_select(:modelo_id, Modelo.all, :id, :nome)%>
<%= f.collection_select(:unidade_id, Unidade.all, :id, :simbolo)%>
<%= f.text_field :valor %>
<%= f.text_field :quantidade %>
</li>
The jQuery file is:
/application.js
function remove_fields(link) {
$(link).prev("input[type=hidden]").val("1");
$(link).closest(".fields").hide();
}
function add_fields(link, association, content) {
var new_id = new Date().getTime();
var regexp = new RegExp("new_" + association, "g")
$(link).parent().after(content.replace(regexp, new_id));
}
$(function(){
$("#insumo_id", $(this)).tokenInput("/insumos.json", {
propertyToSearch: "nome",
tokenLimit: 1,
theme: "facebook",
searchingText: "Procurando...",
hintText: "Digite o que deseja procurar"
});
})
Any ideas would be very apreciataded.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
它可能不起作用,因为您只调用“tokenInput”一次(在 DOM 加载时)。您还应该在单击
link_to_add_fields
链接时调用它(即调用add_fields
函数时)。同样重要的是,#insumo_id
不是 ID,而是类。它是动态的,因此应避免使用相同的 ID。这是所有这些的 JS:我希望它有帮助!
It probably isn't working because you're only calling 'tokenInput' once (on DOM-load). You should also call it when the
link_to_add_fields
link is clicked (so when theadd_fields
function is called). It's also important that#insumo_id
isn't an ID, but a class. It's dynamic, so the same ID's should be avoided. Here's the JS for all of this:I hope it helps!