On Oct 18, 2007, at 12:41 AM, Jaime Mora R. wrote:
Tengo un problema con el plugin model_auto_completer, lo estoy
intentando utilizar con link_to_function y page.insert_html, la
primera
inserción responde bien, pero en las siguientes agrega los controles
pero simplemente no responde el model_auto_completer
<%= link_to_function “Agrega partida” do |page|
page.insert_html :bottom, :items, :partial => “item”, :object =>
SalidaItem.new
end %>
En efecto ahi hay un pequeño conflicto.
El plugin genera IDs con sufijos aleatorios para el campo de texto y
el oculto, para que no haya colisiones (con probabilidad 1-ε :-). Por
tanto, se pueden poner varios widgets en una misma pagina en la
medida en la que el helper los genere.
En la aproximacion que tomaste ocurre que el page.insert_html computa
el resultado de la partial en el lado servidor una sola vez. La
instancia de la partial se convierte en un string pelado que viaja en
la pagina como argumento de un new Insertion.Bottom(). En el fuente
veras que no hay partials ni objects ni nada, como es logico, hay una
sola cadena.
En particular el string pelado tiene una sola generacion de widget,
una sola invocacion al helper.
Al añadir fragmentos solo del lado cliente, sucede que se copia lo
mismo, y por ello tienes en el DOM elementos distintos con mismo ID.
Eso no es correcto y los navegadores cuando sucede tienen
comportamientos anomalos como el que observas.
La moraleja es que si tienes un cacho de HTML con IDs no puedes
replicarlo en la misma pagina porque un ID de elemento ha de ser
unico. Esto es un tema HTML puro y duro.
La solucion pasa porque ese enlace en lugar de replicar la cadena que
se trajo del servidor haga llamadas Ajax para que vengan nuevas
instancias del partial.
– fxn