Duda sobre after_update_element en model_auto_completer

Hola,

Estoy intentando hacer más DRY el uso del :after_update_element en el
siguiente código:

views/productos/_form.html.erb

<%= belongs_to_auto_completer :producto, :presentacion1, :nombre,
:after_update_element => “after_producto_presentacion1” %>
<%= belongs_to_auto_completer :producto, :presentacion2, :nombre,
:after_update_element => “after_producto_presentacion2” %>

javascripts/application.js

function after_producto_presentacion1(element, selected, hf, model_id) {
$$(“div[class=‘pres1’]”).each(function(pres1) {
pres1.update(element.value);
});
}

function after_producto_presentacion2(element, selected, hf, model_id) {
$$(“div[class=‘pres2’]”).each(function(pres2) {
pres2.update(element.value);
});
}

¿ Es posible utilizar una sola función y resolver mediante un parametro
(en
este caso “1” ó “2”) ?

Muchas gracias.

On Tue, Jul 22, 2008 at 5:01 PM, Jaime Mora R.
[email protected] wrote:

});
}

function after_producto_presentacion2(element, selected, hf, model_id) {
$$(“div[class=‘pres2’]”).each(function(pres2) {
pres2.update(element.value);
});
}

¿ Es posible utilizar una sola función y resolver mediante un parametro (en
este caso “1” ó “2”) ?

Por ejemplo podrias usar 3 funciones:

function after_producto_presentacion1(element, selected, hf, model_id) {
after_producto_presentacion(“1”, element, selected, hf, model_id)
}

function after_producto_presentacion2(element, selected, hf, model_id) {
after_producto_presentacion(“2”, element, selected, hf, model_id)
}

function after_producto_presentacion(n, element, selected, hf, model_id)
{
$$(“div.pre” + n).each(function(pres) {
pres.update(element.value);
});
}

2008/7/27 Xavier N. [email protected]

Por ejemplo podrias usar 3 funciones:

Hola Xavier,

Primeramente muchas gracias. Estoy buscando una forma de utilizar una
sola
función y parametrizar desde la vista, de esta forma :

<%= belongs_to_auto_completer :producto, :presentacion1, :nombre,
:after_update_element => “after_producto_presentacion(‘1’)” %>

En estos momentos estoy estudiando el método
determine_completion_options en
el model_auto_completer_helper y tratar de encontrar una solución.
Entiendo
que el hook after_update_element está firmado con esos 4 parámetros, la
tarea aqui es brincar esa barrera.

Un saludo.

El 29 de julio de 2008 2:09, Xavier N.[email protected]escribió:

Lo he escrito sobre la marcha pero ves que quiero decir.

Hola Xavier,

Funcionó bastante bien. Unicamente le agregué un parentesis y una llave
de
cierre del each :

function after_producto_presentacion(n) {
return function (element, selected, hf, model_id) {
$$(“div.pres” + n).each(function(pres) {
pres.update(element.value);
});
}
}

Muchas gracias !

Un saludo.

On Tue, Jul 29, 2008 at 6:30 AM, Jaime Mora R.
[email protected] wrote:

<%= belongs_to_auto_completer :producto, :presentacion1, :nombre,
:after_update_element => “after_producto_presentacion(‘1’)” %>

En estos momentos estoy estudiando el método determine_completion_options en
el model_auto_completer_helper y tratar de encontrar una solución. Entiendo
que el hook after_update_element está firmado con esos 4 parámetros, la
tarea aqui es brincar esa barrera.

:after_update_element esta modelado de acuerdo a su primo hermano en
el plugin auto_complete.

Debe evaluar a un puntero a una funcion, por lo tanto podrias
construir una clausura de esta guisa (no lo he probado):

function after_producto_presentacion(n) {
return function (element, selected, hf, model_id) {
$$(“div.pre” + n).each(function(pres) {
pres.update(element.value);
};
}

Lo he escrito sobre la marcha pero ves que quiero decir.