Viewing file: pant_javascript.php (4.79 KB) -rwxrwxr-x Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php require_once("tutorial/pant_tutorial.php");
//-------------------------------------------------------------- class pant_introduccion extends pant_tutorial { function generar_layout() { $api = toba_parser_ayuda::parsear_api_js('index', 'documentación javascript', 'toba_editor'); $codigo_ej = '<?php class ci_X extends toba_ci { function extender_objeto_js() { echo " {$this->objeto_js}.evt__guardar = function() { return prompt(\"Desea Guardar?\"); } "; } } ?> '; echo " <p> En el capítulo de componentes se utilizó la extensión PHP para personalizar su comportamiento. Dentro de la extensión en PHP es posible modificar el comportamiento del componente en el cliente utilizando javascript. En este capítulo se va trabajar exclusivamente con la parte Javascript de los componentes, para esto Toba cuenta con una jerarquía de clases similar a la que existe en PHP, para profundizar sobre la API está disponible la $api. </p> <p> Es importante tener en cuenta la forma en la cual se extiende un componente en javascript. A continuación se muestra un código muy simple que agrega una confirmación en el cliente cuando el usuario clickea Guardar: </p> "; echo mostrar_php($codigo_ej); echo " <p> El código muestra que el método PHP a extender es <strong>extender_objeto_js()</strong> dentro del cual es necesario insertar el código Javascript. Este lenguaje no soporta clases en la forma convencional de los lenguajes Java o PHP, por lo cual no se <em>hereda</em> del componente sino que directamente se lo cambia, esto es por ejemplo si se quiere agregar un método a un objeto <em>mi_componente</em> se hace definiendo <em>mi_componente.tal_metodo = function() { var i = 20; ...}</em>. </p> <p> Entonces en la extensión PHP, se extiende la <strong>clase</strong> (por ejemplo toba_ei_formulario) mientras que en la de Javascript se extiende el <strong> objeto</strong> puntual. El nombre de este objeto es desconocido al programador (se compone del id del componente) por lo que es necesario pedirselo a la clase PHP por eso se hace <em>{\$this->objeto_js}.metodo = ...</em>. </p> <p> Finalmente cabe recalcar que las extensiones javascript se hacen dentro del mismo componente por motivos de orden y modularidad, pero no es necesariamente la única forma ya que el javascript en definitiva forma parte del HTML resultante de la operación, si se mira el código fuente de la página HTML se podrá ver la extensión y su entorno. </p> "; } }
//-------------------------------------------------------------- class pant_eventos extends pant_tutorial { function generar_layout() { $codigo = '{$this->objeto_js}.evt__sacar_foto = function() { this._parametros = prompt("Nombre de la foto","nombre de la foto"); if (this._parametros != "" && this._parametros != null) { return true; } return false; }'; echo " <p> Así como el evento en PHP significa la interacción del usuario con el servidor, en Javascript existe el mismo criterio, sólo que es la previa de esta interacción. Un evento antes de viajar al servidor escucha un <em>listener</em> en javascript. Por ejemplo si un formulario dispara un evento <em>modificacion</em>, en la extensión del mismo formulario se puede atrapar el método <em>evt__modificacion</em> y retornar true/false para permitir o no la ejecución del evento (entre otras cosas que se pueden hacer). </p> <p> Un ejemplo real es el siguiente javascript perteneciente al catalogo de items del editor, la idea es que cuando el usuario presiona el botón <em>Sacar Foto</em> se le pregunte en Javascript el nombre que toma la foto y luego se tome la foto en el servidor. En this._parametros se guarda el valor del parámetro que termina en el servidor (en este caso el método evt__X__sacar_foto(\$nombre_foto)) </p> "; echo mostrar_php($codigo); } }
//-------------------------------------------------------------- class pant_metodos extends pant_tutorial { function generar_layout() { $codigo = '{$this->objeto_js}.iniciar_viejo = {$this->objeto_js}.iniciar;
{$this->objeto_js}.iniciar = function() { //Extensión this.iniciar_viejo(); //Llamada al original //Extensión }'; echo " <p> La opción a atrapar eventos predefinidos es redefinir el comportamiento de métodos ya existentes. En general no es una metodología recomendada pero a veces es necesaria para casos no contemplados. </p> <p> Al no existir la herencia clásica, la redefinición del método tiene que simularla manualmente, esto es guardar el método viejo y definir el nuevo llamando cuando sea necesario al viejo. Vemos un ejemplo: </p> "; echo mostrar_php($codigo); } }
?>
|