In Rails, Was ist der beste Weg, die automatische Vervollständigung zu erhalten, die Namen Zeigt aber Verwendet IDs?

StackOverflow https://stackoverflow.com/questions/81174

Frage

Ich möchte ein Textfeld haben, die der Benutzer in das geben kann zeigt eine Ajax bevölkerten die Liste meiner Modell-Namen, und dann, wenn der Benutzer, den ich die HTML wollen das Modell der ID zu speichern, und verwenden, wenn die Formular abgeschickt wird.

Ich habe am auto_complete Plugin wurde Stossen, die in Rails 2 herausgeschnitten wurden, aber es scheint nicht die geringste Ahnung zu haben, dass dies nützlich sein könnte. Es gibt einen Railscast Folge , die dieses Plugin deckt verwenden, aber nicht berühren Zu diesem Thema. Die Kommentare weisen darauf hin, dass es ein Problem sein könnte, und Punkt als eine mögliche Lösung model_auto_completer, die, wenn die betrachtete Artikel einfache Strings sind zu funktionieren scheint, aber die eingelegte Text enthält viele Junk-Räume, wenn (wie ich tun möchte) Sie ein Bild in die Listeneinträge enthalten, trotz allem, was die Dokumentation sagt .

ich wahrscheinlich model_auto_completer in Form hacken könnte, und ich kann immer noch so am Ende tun, aber ich bin gespannt, um herauszufinden, ob es bessere Möglichkeiten gibt es aus.

War es hilfreich?

Lösung 2

Ich habe eine abgedroschenes fix für die Junk-Leerzeichen aus dem Bild bekommt. Ich habe eine :after_update_element => "trimSelectedItem" zu den Optionen-Hash-Wert des model_auto_completer (das ist der erste Hash-Wert der drei angegeben). Mein trimSelectedItem findet dann das entsprechende Unterelement und verwendet den Inhalt des für den Elementwert:

function trimSelectedItem(element, value, hiddenField, modelID) {
    var span = value.down('span.display-text')
    console.log(span)
    var text = span.innerText || span.textContent
    console.log(text)
    element.value = text
}

Allerdings läuft diese dann afoul der :allow_free_text Option, die standardmäßig den Text, sobald das Textfeld den Fokus verliert wechselt zurück, wenn der Text in nicht „gültig“ ist Element aus der Liste. So hatte ich, dass auszuschalten auch durch :allow_free_text => true in die Optionen Hash vorbei (auch hier die erste Hash). Ich würde wirklich lieber es bleibt aber.

Also mein aktueller Aufruf den Autocompleter zu erstellen ist:

<%= model_auto_completer(
    "line_items_info[][name]", "", 
    "line_items_info[][id]", "",
    {:url => formatted_products_path(:js),
     :after_update_element => "trimSelectedItem",
     :allow_free_text => true},
    {:class => 'product-selector'},
    {:method => 'GET',  :param_name => 'q'}) %>

Und die Produkte / index.js.erb ist:

 <ul class='products'>
    <%- for product in @products -%>
    <li id="<%= dom_id(product) %>">
            <%= image_tag image_product_path(product), :alt => "" %>
            <span class='display-text'><%=h product.name %></span>
    </li>
    <%- end -%>
 </ul>

Andere Tipps

Ich rollte meinen eigenen. Der Prozess ist ein wenig verworren, aber ...

Ich habe gerade eine text_field auf dem Formular mit einem Beobachter. Wenn Sie mit der Eingabe in das Textfeld starten, sendet der Betrachter die Suchzeichenfolge und die Steuerung gibt eine Liste von Objekten (maximal 10).

Die Objekte werden dann über einen Teil machen gesendet, die die dynamischen die automatische Vervollständigung Suchergebnisse füllen. Die teilweise auffüllt link_to_remote tatsächlich Linien, die wiederum an die Steuerung nach zurück. Die link_to_remote sendet die ID der Benutzerauswahl und dann reinigt einige RJS die Suche auf, füllt im Namen in das Textfeld ein, und legt dann die gewählte ID in ein verstecktes Formularfeld.

Puh ... Ich konnte nicht ein Plugin finden diese in der Zeit zu tun, so rollte ich meine, ich alle Hoffnung, die Sinn macht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top