form_for中的text_field_with_auto_complete

简单的问题 – 如何在form_for块中使用text_field_with_auto_complete

我已经尝试过f.text_field_with_auto_complete但这会产生错误,只是f.text_field_with_auto_complete使用text_field_with_auto_complete似乎没有做任何事情。

我在这里错过了什么吗?

几个月前我写了一个插件,允许你直接在fields_forform_for上调用“ text_field_with_auto_complete ”方法。 我们的想法是通过生成唯一的ID以支持javascript工作来支持在表单中出现多次的文本字段,但它也可能有助于解决您的问题,或者至少为您提供一些新的想法。

请参阅: http : //github.com/pat11639/repeated_auto_complete

……以及本文详细介绍了它的工作原理: http : //patshaughnessy.net/2008/10/31/modifying-the-autocomplete-plugin-to-allow-repeated-fields

我个人用这个:

 <%= f.text_field :name, :autocomplete => "off" %>

并手动添加自动生成的Javascript和CSS。 这是Javascript:

 new Ajax.Autocompleter('customer_name', 'customer_name_auto_complete', '/customers/auto_complete_for_customer_name', { method:'get', paramName:'customer[name]', minChars: 3 }); 

这是CSS:

 div.auto_complete { width: 350px; background: #fff; } div.auto_complete ul { border:1px solid #888; margin:0; padding:0; width:100%; list-style-type:none; } div.auto_complete ul li { margin:0; padding:3px; } div.auto_complete ul li.selected { background-color: #ffb; } div.auto_complete ul strong.highlight { color: #800; margin:0; padding:0; } 

如果您的目的是设置id字段,则必须:

  1. 在LI项中呈现结果,每个li都将DOM id设置为返回记录的id,如下所示:

     
    • Item 1
    • < LI ID="2">Item 2< /LI>
  2. 您的文本字段将类似于:

     <%= text_field_with_auto_complete :model, :method, {}, :after_update_element => 'getSelectionId' % > 
  3. 和一个名为getSelectionId的javascript方法

     function getSelectionId(text, li) { alert (li.id); } 

请注意,您可以通过javascript执行任何操作,因为您可以使用文本和li元素。

另一种选择是这个插件

即使在form_for块中,您也需要指定完整模型,因为它用于构造Ajax回调。 同样在Ricardo列出的空哈希中,您可以将其他选项传递给自动填充字段,包括“:token”等。

我也有这个问题,但我使用的解决方案可能不适用于你。

由于我在自动完成中查询的对象属于不同的模型,我使用了像这样的fields_for,这解决了自动完成问题。

 <% fields_for :model, @formobject.model do %> 

<%= text_field_with_auto_complete :object, :field, :skip_style => true %>

<% end %>

祝好运!