[SOLUCIONADO] Detectar tipo de ef en extensíón de formulario

Hola!
Quería hacerles una consulta.
Hay forma de detectar en una extensión de un formulario el tipo de ef en curso?
El pseudo-codigo de la idea es el siguiente:


function extender_objeto_js()
{
	echo "
	{$this->objeto_js}.ini = function() {
               this.ef(ES DE TIPO EF_EDITABLE .....)
....
....
		}
	}";
}

Mil gracias de antemano!

El ejemplo en concreto es el siguiente. La idea es optimizar el código para que si tengo N ef_editable lo pueda solucionar en forma más general.

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

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

con algo de este tipo

<?php
class ci_localidades_formulario extends toba_ei_formulario
{
	function extender_objeto_js()
	{
		echo "
			{$this->objeto_js}.ini = function() {
				this.ef(ES EDITABLE).input().onkeyup = function() {
					var ef = {$this->objeto_js}.ef(A ESTE MISMO EF);
					ef.set_estado(ef.get_estado().toUpperCase());

			}";
	}
}
?>

Hola Martin,

creo que podrias utilizar la function getObjectClass para saber la clase del ef en cuestion. Seria algo asi


if (getObjectClass(this.ef('apellido')) == 'ef_editable') {
        notificacion.agregar('Soy un EDITABLE... editame que esperas???');
}

Saludos
Richard

En realidad lo que busco es al revés.
No es, obtener el tipo del ef con X nombre (está piola el ejemplo igual!!! todo me sirve en estas alturas, y alguna vez sabré que está por ahi!!).
Sino que la idea es que definir que para cualquier Editable que encuentre en el formulario, no importa su descripción, haga cierta cosa.

Es decir, algo como:
Para todos los editables en el formulario, hacer mayúsculas su ingreso

Ya que si tengo N editables y quiero que asegurar que solo acepten mayúsculas, tengo que definir una función para cada uno:
Si es el ef_editable de nombre 1, entonces hacer mayúsculas su ingreso
Si es el ef_editable de nombre 2, entonces hacer mayúsculas su ingreso

Si es el ef_editable de nombre N, entonces hacer mayúsculas su ingreso

Quizas una combinacion con esta funcion:

http://desarrollos.siu.edu.ar/toba_editor_trunk/doc/api_js/ei_formulario.html#efs

Seguí tu consejo, probé de varias formas y no le encontré la vuelta. Mucho se debe a que estoy peleando entre el proyecto de referencia, ayudas en web, y la wiki de Toba.
Lo dejo para una instancia más adelante.
Gracias igual!!!

Habría que ver como y en que momento estás guardando los datos, pero se me ocurre que podrías hacerte un método genérico para que acepte como parámentros una lista de efs editables y que ésta función se encargue de pasar a mayúsculas/minúsculas los datos (si es solo esto lo que querés hacer). Esto lo harías en php y no es complicado. De hecho es la solución más simple y quizás no sea la mejor.

Ahora si lo que querés es que el usuario vea en pantalla que vos éstas transformando los datos, podés seguir las indicaciones que te comenta Seba en otro tópico.

El código que dice richard es algo así:


			{$this->objeto_js}.ini = function () {
				for (var id_ef in this.efs()) {
					if (getObjectClass(this.ef(id_ef)) == 'ef_editable') {
						alert(id_ef + ' es_editable');
					}
				}
			}

Probandolo encontré un bug en la forma de declarar la clase javascript de algunos hijos del ef_editable (fecha, clave, moneda, etc.), con lo cual da falsos positivos el getObjectClass, la solución recien lo estoy subiendo al trunk en estos días, con lo cual te recomiendo si usas esta estrategia encararlo más adelante.

Otra posiblidad que tenés es aprovecharte de que el dato del tipo ya se conoce estáticamente en php, probablemente esta sea la solución mas robusta aunque no se si se entiende la mezcla php/javascript:


<?php

class form_x extends toba_ei_formulario
{
	function extender_objeto_js()
	{
		echo "{$this->objeto_js}.ini = function () {\n";
		foreach ($this->get_efs_activos() as $id_ef) {
			if (get_class($this->ef($id_ef)) == 'toba_ef_editable') {
				echo "alert('$id_ef es un editable');\n";
			}
		}
		echo "}";
	}
}

Este ejemplo en PHP me sirve de mucho. Esta pregunta, y la http://comunidad.siu.edu.ar/index.php?topic=1236.0 perseguían optimizar lo mismo, la carga en mayúsculas de los datos.
Una función similar podría utilizarla para cargar los datos en la bdd, al poner todas en mayúsculas, independientemente de que el estilo lo esté mostrando ya en mayúscula (teniendo en cuenta que esto es solo estético).
En esta instancia… con algo similar a tu ejemplo, solo tendría que aplicar a todos los datos del formulario (sean números o cadenas), toba_formateo::formato_mayusculas, sin necesidad de individualizarlo.