2010-12-20 15 views
2

Wie kann ich den Wert, den ich vom Textfeld auto_complete bekomme, einfach an einen Teil übergeben.Rails: Wie man einen Wert aus dem Textfeld an einen Teil übergeben kann

<%= 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 %> 

Bye,

Nico

Antwort

1

Zunächst einmal müssen Sie wissen, dass die Helfer text_field_with_auto_complete und button_to_function nicht wirklich Benutzeraktionen behandeln, sondern nur HTML- und JavaScript-Code generieren. Nur generierter JavaScript-Code kann mit dem Benutzer interagieren. In diesem Fall erzeugt die folgende text_field_with_auto_complete (ungefähr):

<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> 

Der obige Code ist, dass der Benutzer in seinem Browser erhält. Wenn Sie die für text_field_with_auto_complete lesen, dann werden Sie sehen, dass wir die Option :after_update_element verwenden können. Mit dieser Option können wir den Namen der JavaScript-Funktion angeben, die aufgerufen wird, wenn der Benutzer einen der vorgeschlagenen Werte auswählt.

Was wir tun müssen:

  1. eine JavaScript-Funktion schreiben, dass wird von der automatischen Vervollständigung Feld überall vom Benutzer ausgewählten Wert anzuzeigen.
  2. Anruf text_field_with_auto_complete mit :after_update_element

Das ist, wie die Vorlage aussehen wird:

<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> 

Nun, wenn ein Benutzer einen Wert in dem Autocomplete-Feld wählt, wird es in dem Elemente angezeigt werden, mit id = selected_participant_container

Natürlich können Sie Methoden verwenden, die von tokland vorgeschlagen werden.

Aber ich würde Ihnen empfehlen, zuerst die Grundlagen von HTML und Javascript zu erlernen.

0

Hinweis zuerst, dass der Block aus button_to_function (und seine teilweise, natürlich) erzeugt wird serverseitige, so dass es keine Möglichkeit, den Wert zu wissen, hat der Autovervollständigung im Client. Sie haben 2 Möglichkeiten, um das zu erreichen, was Sie wollen: Erstellen Sie eine RJS-Aktion für die Auto_Complete (falls möglich) oder 2) verwenden Sie Javascript/AJAX und verbinden Sie sich mit der Auto_Complete URL, holen Sie sich den Wert und modifizieren Sie das DOM entsprechend (auch in JS).

Verwandte Themen