After_update_element en model_auto_completer


#1

Hola,

En en el plugin [1] model_auto_completer, after_update_element se
utiliza
para especificar una función javascript que será llamada cuando el
usuario
seleccione un elemento de la lista. Esta función recibe cuatro
argumentos:
el text_field, el elemento seleccionado de la lista, el campo oculto y
el
model id. Bien, mi duda es en la definición de esta función;
anteriormente
simplemente definia la función con sus cuatro argumentos y funcionaba,
pero
ahora debe evaluar a un puntero a una función :

javascripts/application.js

Esta forma ya NO funciona envia el error: value es nulo ó no es un

objeto

function after_consulta_paciente(element, selected, hf, model_id) {
alert(element.value);
}

De esta forma SI funciona, evaluando a un puntero a una función :

function after_consulta_paciente() {
return function (element, selected, hf, model_id) {
alert(element.value);
}
}

#views/consultas/_form.html.erb

<%= belongs_to_auto_completer :consulta, :paciente, :nombre_completo, {
:after_update_element => “after_consulta_paciente()” } %>

Evidentemente esto me permite continuar sin ningún problema, pero bueno
me
surgió la duda.

[1] http://model-ac.rubyforge.org/

Gracias por la ayuda.
Un saludo.


#2

2008/10/18 Jaime Mora R. removed_email_address@domain.invalid:

}

#views/consultas/_form.html.erb

<%= belongs_to_auto_completer :consulta, :paciente, :nombre_completo, {
:after_update_element => “after_consulta_paciente()” } %>

Evidentemente esto me permite continuar sin ningún problema, pero bueno me
surgió la duda.

Hola Ramon.

Esa opcion recibe una cadena JavaScript que evalue a una funcion.

Ahi tienes dos opciones, o bien escribir algo asi:

:after_update_element => ‘function (…) { … }’

o bien tener la funcion definida en otro sitio y configurar su nombre:

:after_update_element => ‘after_consulta_paciente’

Fijate que no hay parentesis, no es una llamada. Esto funciona asi
porque en JavaScript como en C el nombre de una funcion evalua a la
funcion misma (en C un puntero). Mientras que en Ruby se entiende que
simplemente estas obviando los parentesis.


#3

El 18 de octubre de 2008 13:57, Xavier N. removed_email_address@domain.invalid escribió:

2008/10/18 Jaime Mora R. removed_email_address@domain.invalid:

Hola Ramon.

Fijate que no hay parentesis, no es una llamada. Esto funciona asi
porque en JavaScript como en C el nombre de una funcion evalua a la
funcion misma (en C un puntero). Mientras que en Ruby se entiende que
simplemente estas obviando los parentesis.

Entendido Xavi. Muchas gracias.