Rails: как передать значение из текстового поля в частичное - PullRequest
2 голосов
/ 20 декабря 2010

Как я могу легко передать значение, полученное из текстового поля auto_complete, в частичное.

<%= text_field_with_auto_complete :participant, :name, {}, {:url => {:controller => "contentcom/discussions", :action => :get_users_for_auto_complete}, :method => :get, :param_name => 'search'} %>
        <%= button_to_function(:OK) do |page|
                page.insert_html :top, :participants, :partial => 'participant', :locals =>  end %>

Пока,

Нико

Ответы [ 2 ]

1 голос
/ 21 декабря 2010

Прежде всего вам необходимо знать, что помощники text_field_with_auto_complete и button_to_function на самом деле не обрабатывают действия пользователя, а только генерируют HTML и код JavaScript. Только сгенерированный код JavaScript может взаимодействовать с пользователем. В этом случае text_field_with_auto_complete генерирует следующее (приблизительно):

<input type="text" id="participant_name" name="participant[name]" size="15" />
<div id="participant_name_auto_complete" class="auto_complete"> </div>

<script type="text/javascript">
  var participant_auto_completer = new Ajax.Autocompleter (
    'Participant',
    'Name',
    '/contentcom/discussions/get_users_for_auto_complete',
    {method: 'GET', param_name: 'search'}
  );
</script>

Приведенный выше код является то, что пользователь получает в своем браузере. Если вы прочитаете документацию для text_field_with_auto_complete, то увидите, что мы можем использовать опцию :after_update_element. Эта опция позволяет нам указать имя функции JavaScript, которая будет вызываться, когда пользователь выбирает одно из предложенных значений.

Что нам нужно сделать:

  1. написать функцию JavaScript, которая будет отображаться в любом месте по выбору пользователя значение из поля автозаполнения.
  2. звоните text_field_with_auto_complete с :after_update_element

Вот так будет выглядеть шаблон:

<ul id="selected_participant_container"></ul>

<%= text_field_with_auto_complete :participant, :name, {}, {
  :url => {:controller => "contentcom/discussions", :action => :get_users_for_auto_complete},
  :method => :get,
  :param_name => 'search',
  :after_update_element => 'afterParticipantSelected'
}%>

<script type="text/javascript">
  function afterParticipantSelected (el, value) {
    var container = document.getElementById ('selected_participant_container');

    container.innerHTML = value;
  }
</ Script>

Теперь, когда пользователь выбирает значение в поле автозаполнения, оно будет отображаться в элементе с id = selected_participant_container

Конечно, вы можете использовать методы, предлагаемые Tokland.

Но я бы рекомендовал вам сначала изучить основы HTML и Javascript.

0 голосов
/ 20 декабря 2010

Сначала обратите внимание, что блок button_to_function (и его частичное, конечно) генерируется на стороне сервера , поэтому у него нет возможности узнать значение автозаполнения в клиенте. У вас есть 2 способа выполнить то, что вы хотите: создать действие RJS для auto_complete (если это возможно) или 2) использовать Javascript / AJAX и подключиться к URL-адресу auto_complete, получить значение и соответствующим образом изменить DOM (также в JS).

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