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 .....)
....
....
}
}";
}
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
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.
{$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.