text_field_with_auto_complete внутри формы для - PullRequest
4 голосов
/ 28 октября 2008

Простой вопрос на самом деле - как мне использовать text_field_with_auto_complete внутри form_for блока?

Я пытался сделать f.text_field_with_auto_complete, но это выдает ошибку, и само по себе использование text_field_with_auto_complete, похоже, ничего не дает.

Я что-то здесь упускаю?

Ответы [ 5 ]

6 голосов
/ 30 октября 2008

Я лично использую это:

<%= f.text_field :name, :autocomplete => "off" %><div class="auto_complete" id="customer_name_auto_complete"></div>

И добавьте автоматически сгенерированный 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;
}
3 голосов
/ 10 января 2009

Пару месяцев назад я написал плагин, который позволяет вам вызывать метод "text_field_with_auto_complete" непосредственно на fields_for или form_for. Идея состояла в том, чтобы поддержать текстовые поля, которые появляются в форме более одного раза, генерируя уникальные идентификаторы, чтобы позволить JavaScript работать, но это также может помочь решить вашу проблему или, по крайней мере, дать вам несколько новых идей.

См .: http://github.com/pat11639/repeated_auto_complete

... и эту статью для деталей о том, как это работает: http://patshaughnessy.net/2008/10/31/modifying-the-autocomplete-plugin-to-allow-repeated-fields

1 голос
/ 05 ноября 2008

Даже в пределах блока form_for вам необходимо указать полную модель, поскольку она используется для создания обратного вызова Ajax. Также в пустом хеш-коде Рикардо, который вы указали, вы можете передать дополнительные параметры в поле автозаполнения, включая ": token" и т. Д.

1 голос
/ 29 октября 2008

Если вы хотите установить поле идентификатора, вы должны:

  1. отображает результаты в элементах LI, каждый из которых имеет свой идентификатор DOM, настроенный на идентификатор возвращаемой записи, например:

    <UL>
           <LI ID="1">Item 1</LI>
           < LI ID="2">Item 2< /LI>
    </UL>
    
  2. Ваше текстовое поле будет выглядеть примерно так:

    <%= text_field_with_auto_complete :model, :method, {}, :after_update_element => ‘getSelectionId’ % >
    
  3. и метод javascript с именем getSelectionId, подобный этому

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

обратите внимание, что вы можете делать все что угодно с помощью javascript, так как у вас есть текст и доступный элемент li.

Другой вариант - этот плагин

0 голосов
/ 02 января 2009

У меня тоже была эта проблема, но решение, которое я использовал, может не относиться к вам.

Поскольку объект, который я запрашивал в автозаполнении, принадлежал другой модели, я использовал такие поля: вот так, что решило проблему автозаполнения.

<% fields_for :model, @formobject.model do %>
<p>
<%= text_field_with_auto_complete :object, :field, :skip_style => true %>
</p>
<% end %>

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...