Extensiones Javascript
Todos los elementos de interface tienen en javascript asociado un objeto encargado del comportamiento del componente en el cliente.
¿Cuando usar javascript?
La responsabilidad de estos objetos es manejar todo aspecto de la pantalla que no pudo ser determinado estáticamente. Por ejemplo si un combo necesita deshabilitarse en base al tilde de un checkbox es un comportamiento dinámico de pantalla ya que el servidor (PHP) no puede introducir lógica de este tipo, es javascript el lenguaje encargado de manejar esta situación. Distinto es el caso cuando el combo se deshabilite en base a un etapa específica de un ABM (por ejemplo en la modificación), esta lógica, aunque de pantalla, es estática al pedido actual y pudo ser determinada desde PHP, impactando al combo con el API de los efs en PHP.
Forma de extensión
Todo código javascript necesita ser parte de la salida PHP. Este concepto puede traer a confusión, el código javascript necesita ser definido en PHP, como también lo hace con la salida HTML. Para esto primero se necesita hacer una subclase en PHP del componente, allí se encuentra una ventana de extensión javascript, el método toba_ei::extender_objeto_js):
<?php
function extender_objeto_js()
{
echo "
{$this->objeto_js}.evt__agregar = function() { //Encabezado
alert('Estamos extendiendo el comportamiento de un evento'); //Cuerpo
}
{$this->objeto_js}.evt__validar_datos = function() { //Encabezado
alert('Estamos extendiendo la validacion'); //Cuerpo
}";
}
?>
El Encabezado está compuesto de dos partes:
Objeto base de la extensión: Se utiliza $this->objeto_js, este atributo mantiene el nombre del objeto javascript asociado.
Nombre del método.
A diferencia de las extensiones en PHP, aquí no se extiende la clase javascript sino la instancia, (el objeto) directamente. El cuerpo de la extensión depende del componente particular.
Estas extensiones pueden verse en el código fuente del HTML generado, pero con las variables ligadas:
...
js_ei_form_1822..evt__agregar = function() { //Encabezado
alert('Estamos extendiendo el comportamiento de un evento'); //Cuerpo
}
js_ei_form_1822..evt__validar_datos = function() { //Encabezado
alert('Estamos extendiendo la validacion'); //Cuerpo
}
...