4 Stimmen

text_field_with_auto_complete innerhalb von form_for

Eigentlich eine einfache Frage - wie verwende ich text_field_with_auto_complete innerhalb einer form_for Block?

Ich habe versucht, die f.text_field_with_auto_complete aber das führt zu einer Fehlermeldung, und die Verwendung von text_field_with_auto_complete allein scheint nichts zu bewirken.

Übersehe ich hier etwas?

6voto

Can Berk Güder Punkte 103655

Ich persönlich benutze dies:

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

Und fügen Sie das automatisch generierte Javascript und CSS manuell hinzu. Hier ist das Javascript:

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

und hier ist das 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;
}

3voto

pat Punkte 46

Vor ein paar Monaten habe ich ein Plugin geschrieben, mit dem man die " text_field_with_auto_complete "Methode direkt auf fields_for o form_for . Die Idee war, Textfelder zu unterstützen, die mehr als einmal in einem Formular erscheinen, indem eindeutige IDs generiert werden, damit das Javascript funktionieren kann, aber es könnte auch helfen, Ihr Problem zu lösen, oder Ihnen zumindest einige neue Ideen geben.

Siehe: http://github.com/pat11639/repeated_auto_complete

...und in diesem Artikel erfahren Sie, wie es funktioniert: http://patshaughnessy.net/2008/10/31/modifying-the-autocomplete-plugin-to-allow-repeated-fields

1voto

Ricardo Acras Punkte 35294

Wenn Sie beabsichtigen, ein id-Feld zu setzen, müssen Sie das tun:

  1. die Ergebnisse in LI-Elementen wiedergeben, wobei die DOM-ID jeder Li auf die ID des zurückgegebenen Datensatzes eingestellt ist, etwa so:

    <UL>
           <LI ID="1">Item 1</LI>
           < LI ID="2">Item 2< /LI>
    </UL>
  2. Ihr Textfeld würde etwa so aussehen:

    <%= text_field_with_auto_complete :model, :method, {}, :after_update_element => ‘getSelectionId’ % >
  3. und eine Javascript-Methode namens getSelectionId wie folgt

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

Beachten Sie, dass Sie alles über Javascript tun können, da Sie den Text und das li-Element zur Verfügung haben.

Eine weitere Möglichkeit ist dieses Plugin

1voto

Sogar innerhalb des form_for-Blocks müssen Sie das vollständige Modell angeben, da es für den Aufbau des Ajax-Callbacks verwendet wird. Auch in dem leeren Hash, den Ricardo aufgelistet hat, könnten Sie zusätzliche Optionen an das Autovervollständigungsfeld übergeben, einschließlich ":token" usw.

0voto

Ich hatte dieses Problem auch, aber die Lösung, die ich verwendet habe, trifft vielleicht nicht auf Sie zu.

Da das Objekt, das ich in der Autovervollständigung abfragte, zu einem anderen Modell gehörte, verwendete ich ein fields_for wie dieses, wodurch das Problem der Autovervollständigung gelöst wurde.

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

Viel Glück!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X