Mayusculas en ef_editable en ML

Las mayusculas en ef_editable funciona sin inconvenientes en un formulario simple, pero no puedo hacer andar en un formulario multilinea. Con el sig. codigo:


<?php
class form_ml_modelos extends toba_ei_formulario_ml
{
	function extender_objeto_js()   {
		echo "
			{$this->objeto_js}.ini = function () {
				this.ef('modelo').input().onkeyup = function() {
				var ef = {$this->objeto_js}.ef('modelo');
				ef.set_estado(ef.get_estado().toUpperCase());
				}

				this.ef('impresoras').input().onkeyup = function() {
				var ef = {$this->objeto_js}.ef('impresoras');
				ef.set_estado(ef.get_estado().toUpperCase());
				}

			}
		";
	}
}

?>

No arroja error, simplemente no pasa a mayusculas cuando se escribe.
Saludos. Ricardo.

Hola Ricardo,
Antes que nada chequea este thread porque martín informa de un par de problemas importantes con esta forma de auto-reemplazo.

La diferencia del ML con respecto al form común es que tiene N filas. El problema no termina ahí porque las filas se pueden dinámicamente crear en javascript.
Este código javascript lo que hace es atrapar el momento de inicializacion del formulario (metodo ini) y cambiar el onkeyup del input del ef.

Por un lado en el ML no hay mas un único ef ‘impresoras’ sino que hay uno por fila. Además esta ventana (ini) no nos sirve para impactar sobre las filas creadas dinámicamente. Lo que hay que hacer para que funcione es redefinir un método que se ejecute al inicializar una fila y no todo el componente, te dejo el código, abajo la explicación


<?php
class form_ml_modelos extends toba_ei_formulario_ml
{
	function extender_objeto_js() {
		echo "
			{$this->objeto_js}.iniciar_fila_orig = {$this->objeto_js}.iniciar_fila;
			{$this->objeto_js}.iniciar_fila = function (fila, agregar_tabindex, es_inicial) {
				this.iniciar_fila_orig(fila, agregar_tabindex, es_inicial);
				this.ef('impresora').ir_a_fila(fila).input().onkeyup = function() {
					var ef = {$this->objeto_js}.ef('impresora').ir_a_fila(fila);
					ef.set_estado(ef.get_estado().toUpperCase());
				}
			}
		";
	}
?>

Lo que hace el código es un override del método de inicialización de una fila del formulario, esto se llama tanto para las filas que vienen desde el server como para aquellas que se crean en javascript. Lo primero que hay que tener en cuenta es que javascript no tiene herencia, con lo cual lo que hago es ‘recordar’ como era la funcion original e invocarla con los mismos parámetros, seria como hacer un super o parent. Luego el código es similar al del form común excepto que se usa el ir_a_fila(fila) fundamental para apuntar a un ef de una fila particular en los ML.