Rails:如何将值从textfield传递给partial

时间:2010-12-20 18:07:28

标签: ruby-on-rails ruby

如何轻松地将我从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 个答案:

答案 0 :(得分:1)

首先,您需要知道帮助者text_field_with_auto_completebutton_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的{​​{3}},那么您会看到我们可以使用:after_update_element选项。此选项允许我们指定当用户选择其中一个建议值时将调用的JavaScript函数的名称。

我们需要做什么:

  1. 编写一个JavaScript函数 将显示用户选择的任何地方 来自自动填充字段的值。
  2. 致电text_field_with_auto_complete :after_update_element
  3. 这就是模板的样子:

    <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的基础知识。

答案 1 :(得分:0)

首先请注意,button_to_function的块(当然是部分的)生成服务器端,因此它无法知道客户端中自动完成的值。你有2种方法可以完成你想要的:为auto_complete创建一个RJS动作(如果可能的话)或2)使用Javascript / AJAX并连接到auto_complete URL,获取值并相应地修改DOM(也在JS中)。