En Rails, ¿Cuál es la Mejor Manera de Conseguir Autocompletar que Muestra los Nombres pero Utiliza Identificadores?

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

Pregunta

Quiero tener un cuadro de texto que el usuario puede escribir en el que se muestra un Ajax-rellena la lista de mi modelo de nombres y, a continuación, cuando el usuario selecciona uno quiero el código HTML para guardar el modelo de IDENTIFICACIÓN, y el uso que cuando el formulario es enviado.

He estado hurgando en la auto_complete plugin que tengo extirpados en Rails 2, pero parece que no tiene la menor idea de que esto podría ser útil.Hay un Railscast episodio que cubre el uso de ese plugin, pero no toca en este tema.Los comentarios señalan que podría ser un problema, y punto a model_auto_completer como una posible solución, el cual parece funcionar si los artículos vistos son simples cadenas de caracteres, pero el texto insertado incluye un montón de basura los espacios de si (como me gustaría hacer) incluir una imagen en la lista de elementos, a pesar de lo que la documentación dice.

Yo probablemente podría hack model_auto_completer en forma, y yo todavía puede terminar de hacerlo, pero me siento con ganas de averiguar si hay mejores opciones que hay.

¿Fue útil?

Solución 2

Tengo un manido solución para la basura los espacios de la imagen.He añadido un :after_update_element => "trimSelectedItem" para las opciones de hash de la model_auto_completer (esa es la primera hash de los tres dados).Mi trimSelectedItem a continuación, se encuentra la correspondiente sub-elemento y utiliza el contenido de que para el valor del elemento:

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
}

Sin embargo, esto entra en conflicto con la :allow_free_text opción, que, por defecto, cambia el texto de vuelta tan pronto como el cuadro de texto pierde el foco si el texto en el interior no es un "válido" elemento de la lista.Así que tuve que apagarla, también, por el paso de :allow_free_text => true en las opciones de hash (de nuevo, la primera de hash).Realmente me gustaría más bien permaneció, sin embargo.

Así que mi llamada actual para crear la autocompleter es:

<%= 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'}) %>

Y los productos/index.js.erb es:

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

Otros consejos

Me di la mía.El proceso es un poco complicado, pero...

Acabo de hacer un text_field en el formulario con un observador.Cuando usted comience a escribir en el campo de texto, el observador envía la cadena de búsqueda y el controlador devuelve una lista de objetos (máximo de 10).

Los objetos son entonces enviados a representar a través de un parcial que llena la dinámica de autocompletar los resultados de búsqueda.El parcial en realidad rellena link_to_remote líneas que después de volver al controlador de nuevo.El link_to_remote envía el id de la selección del usuario y, a continuación, algunos RJS limpia la búsqueda, rellena el nombre en el campo de texto y, a continuación, coloca el id seleccionado en un campo de formulario oculto.

Ufff...No podía encontrar un plugin para hacer esto en el tiempo, así que me di la vuelta mi cuenta, espero que todo lo que tiene sentido.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top