2010-12-20 7 views
7

Estoy utilizando el antiguo auto_complete plugin junto con la gema acts as taggable on en un intento de replicar básicamente el comportamiento de etiquetado del propio desbordamiento de pila. Estoy más o menos haciendo lo que se describe en este rails cast. Para etiquetas individuales, esto funciona genial. Sin embargo, realmente me gustaría hacerlo de modo que cada vez que el usuario ingrese un espacio o una coma (muy parecido al desbordamiento de la pila), la autocompletar comenzará de nuevo. Me imagino que hay alguna forma de hacer esto a través de regex, pero no estoy seguro de cómo aplicar este comportamiento al campo de texto (me imagino usando JavaScript para "reiniciar" el autocompletado, pero reconozco que soy bastante débil . cuando se trata de JavaScript Esto es lo que mi vista se parece a:.rieles autocompletan etiquetas separadas por comas usando regex

<%= text_field_with_auto_complete :business, :tags, {}, { :url => formatted_businesses_path(:js), :method => :get, :with => "'search=' + element.value" } %> 

mi controlador es muy sencillo, sólo tiene que guardar las etiquetas para ese negocio en particular

Si alguien me podría apuntar en la dirección correcta (Como no estoy seguro de cómo hacerlo, lo agradecería mucho.

+0

¿Alguna vez llegó a una solución? Necesito hacer exactamente lo mismo. – ardavis

+0

@ardavis: incluso si esto es demasiado tarde para ti, eche un vistazo a la opción ': tokens => [", "," "]'. 'control.js' ofrece" autocompletado incremental Tokenizado "usando eso. – evnu

Respuesta

10

Sé que esto es viejo, pero para recrear este comportamiento utilicé rails3-jquery-autocomplete con acts-as-taggable-on. Funcionan muy bien y fácilmente juntos.

// Model 
class Foo < ActiveRecord::Base 
    acts_as_taggable_on :tags 
end 

// Controller 
class FoosController < ApplicationController 
    autocomplete :tag, :name, :class_name => 'ActsAsTaggableOn::Tag' 
    ... 
end 

// Routes 
resources :foos do 
    collection do 
    get :autocomplete_tag_name 
    end 
end 

//View 
<% form_for :foo do |form| %> 
    <%= form.label :tag_list, "Tags" %> 
    <%= form.autocomplete_field :tag_list, autocomplete_tag_name_foos_path, :"data-delimiter" => ', ' %> 
<% end %> 

Espero que ayude a alguien.

+0

¿De dónde vienen las 'notas' en su camino? Debería ser 'foos' ¿verdad? Es posible que desee cambiar eso para aclararlo. –

+0

Oh, lo perdí, gracias. Corregido – chrisgooley

+0

Tu código me ayudó, ¡gracias! – lesyk

1

Me gustaría conocer las opciones para el text_field_with_auto_complete ayudante. Si no es compatible con lo que necesita, lo dejaría en favor de algo sobre lo que tenga más control. Mi experiencia con ayudantes/complementos como este es que solo le ahorran tiempo si está haciendo exactamente lo que esperan que haga. Si necesita algo personalizado, incurrirá en más dolor tratando de evitarlos de lo que valen.

Para deshacerse del ayudante text_field_with_auto_complete, observe el HTML y JS que genera en la página representada. Copie y pegue eso, luego modifíquelo para hacer lo que necesita. Todavía puede usar el lado del controlador del complemento de autocompletar.

El JS querrá dividir la cadena de comas se verá algo como esto:

var tags = $('#myTextInput').value(); 
var splitTags = tags.split(/\w*,\w*/); 

JS regexen son bastante similares a Ruby. Esa expresión regular se dividirá en comas, consumiendo espacio en blanco adicional.

Cuestiones relacionadas