dojo() Ayudante de VistaEl ayudante de vista dojo() está destinado a simplificar el
establecimiento del medio ambiente de Dojo, incluyendo las siguientes responsabilidades:Especificar bien un CDN o un path local para instalar Dojo.Especificando paths a módulos Dojo personalizados.Especificando sentencias dojo.require.Especificando hojas de estilo dijit a usar.Especificando eventos dojo.addOnLoad().La implementación del ayudante de vista dojo() es un ejemplo de
implementación de un marcador de posición. El conjunto de datos en él, persiste entre los
objetos vista y puede ser directamente activado con en "echo" de PHP
desde su script.dojo() Ejemplo de Uso del Ayudante de VistaEn este ejemplo, asumamos que el desarrollador estará usando Dojo desde un path
local, se necesitarán varios dijits, y se utilizará el tema de dijit Tundra.En muchas páginas, el desarrollador no podrá utilizar Dojo para nada. Así, vamos a
centrarnos primero en un view script donde Dojo es necesario y luego en el layout
script, en donde vamos a configurar algo del medio ambiente de Dojo y luego lo
mostraremos.En primer lugar, tenemos que decir nuestro objeto vista que utilice el path del
ayudante de vista de Dojo. Esto puede hacerse en el arranque o en un plugin de ejecución
temprana; simplemente apoderarse de su objeto vista y ejecutar lo siguiente:addHelperPath('Zend/Dojo/View/Helper/', 'Zend_Dojo_View_Helper');
]]>El paso siguiente, el view script. En este caso, vamos a especificar que vamos a
estar utilizando un FilteringSelect -- que consumirá un almacén personalizado basado en
QueryReadStore, al que llamamos 'PairedStore' y almacenado en nuestro módulo 'custom'.
State:
dojo()->enable()
->setDjConfigOption('parseOnLoad', true)
->registerModulePath('custom', '../custom/')
->requireModule('dijit.form.FilteringSelect')
->requireModule('custom.PairedStore'); ?>
]]>En nuestro script de esquema, vamos entonces a comprobar si Dojo está habilitado, y
si es así, haremos algunas configuraciones más generales y lo ensamblaremos:doctype() ?>
headTitle() ?>
headMeta() ?>
headLink() ?>
headStyle() ?>
dojo()->isEnabled()){
$this->dojo()->setLocalPath('/js/dojo/dojo.js')
->addStyleSheetModule('dijit.themes.tundra');
echo $this->dojo();
}
?>
headScript() ?>
layout()->content ?>
inlineScript() ?>
]]>En este punto, sólo necesita asegurarse de que sus archivos están en el lugar
correcto y que ha creado el punto final de acción para su FilteringSelect!Uso Programático y Declarativo de DojoDojo permite usar a ambos declarative y
programmatic en muchas de sus características. El uso de
Declarative utiliza elementos HTML con atributos no estándar
que se parsean cuando la página se está cargado. Mientras que ésta es una sintaxis
poderosa y simple de utilizar, para muchos desarrolladores esto puede causar problemas
con la validación de páginas.El uso de Programmatic permite al desarrollador decorar los
elementos existentes tirando de ellos por ID o selectores CSS y
pasarlos a los constructores apropiados de objetos en Dojo. Debido a que no se usan
atributos HTML no standard, las páginas continúan con la validación.En la práctica, ambos casos de uso permiten una degradación elegante cuando
javascript está desactivado o los diversos recursos de Dojo script están fuera de
alcance. Para promover las normas y validación de documentos, Zend Framework hace uso de
los usos programáticos por defecto; los diversos ayudantes de vista generarán javascript
y lo empujan al ayudante de vista dojo() para su inclusión
cuando sean presentados.Utilizando esta técnica los desarrolladores pueden también desear explorar la
posibilidad de escribir sus propia decoración programática de la página. Uno de los
beneficios sería la posibilidad de especificar handlers para eventos dijit.Para permitir esto, así como la posibilidad de usar sintaxis declarativa, hay
disponibles una serie de métodos estáticos para establecer globamente este
comportamiento.Especificando el Uso Declarativo y Programático de DojoPara especificar el uso declarativo, simplemente llame al método estático
setUseDeclarative():Si decide más bien utilizar el uso programático, llame al método estático
setUseProgrammatic():Por último, si quiere crear sus propias normas programáticas, debe especificar el
uso programático, pero al pasarle el valor '-1'; en esta situación, no se creará
ningún javascript para decorar cualquier dijit usado.TemasDojo permite la creación de los temas de su dijits (widgets). Puede seleccionar uno
pasándolo en un path de módulo:dojo()->addStylesheetModule('dijit.themes.tundra');
]]>La ruta del módulo es descubierta por utilizar el carácter '.' como separador de
directorio y utilizando el último valor en la lista como el nombre del archivo
CSS en ese directorio del tema a usar; en el ejemplo de arriba,
Dojo buscará el tema en 'dijit/themes/tundra/tundra.css'.Cuando se utiliza un tema, es importante recordar pasar la calse del tema a, por lo
menos un contenedor rodeando cualquier dijits que se utilice; el caso de uso más común
es pasárselo en el body:
]]>Usando Layers (Construcciones Personalizadas)Por defecto, cuando utilice uns sentencia dojo.require, dojo hará una solicitud de
retorno al servidor para agarrar al archivo javascript apropiado. Si hay muchos dijits
en el lugar, esto se traduce en muchas peticiones al servidor -- lo que no es óptimo.La respuesta de Dojo a esto es proporcionar la capacidad de crear custom
builds (construcciones personalizadas. Las contrucciones hacen varias
cosas:Grupos de archivos necesarios en layers; una capa
(layer) agrupa a todos archivos necesarios en un único archivo JS. (De ahí el
nombre de esta sección.)"Interns" no son archivos javascript usados por dijits (típicamente, archivos
de plantilla). También están agrupados en el mismo archivo JS como la capa.
Pasa el archivo a través de ShrinkSafe, que elimina espacios en blanco y
comentarios, así como acorta nombres de variables.Algunos archivos pueden no ser superpuestos, pero el proceso creará una versión
especial del directorio con la archivo capa y todos los otros archivos. Esto le permite
tener una distribución reducida adaptada a su sitio o necesidades de aplicación.Para usar una capa, el ayudante de vista dojo() tiene el
método addLayer() para añadir paths de capas requeridas:dojo()->addLayer('/js/foo/foo.js');
]]>Para más información sobre la creación de construcciones personalizadas, por favor
consulte la docuemntación de Build de Dojo.Métodos DisponiblesEl ayudante de vista dojo() siempre devuelve una instancia
del contenedor del marcador de posición dojo. Ese objeto contenedor dispone de los
siguientes métodos:setView(Zend_View_Interface $view): establecer una
instancia de vista en el contenedor.enable(): habilitar explícitamente la integración de
Dojo.disable(): deshabilitar la integración de
Dojo.isEnabled(): determinar cuándo la integración de Dojo
está habilitada o no.requireModule($module): establecer una sentencia
dojo.requiregetModules(): determinar qué módulos han sido
requeridos.registerModulePath($module, $path): registrar un path
de un módulo personalizado de Dojo.getModulePaths(): obtener la lista de los paths de
módulos registrados.addLayer($path): añadir una capa (construcción
personalizada) del path a utilizar.getLayers(): conseguir una lista de todos los paths
de capas registrados (construcción personalizada).removeLayer($path): eliminar la capa que concuerde
con $path de la lista de capas registradas
(construcción personalizada).setCdnBase($url): establecer la URL base para un CDN;
típicamente, una de las Zend_Dojo::CDN_BASE_AOL o
Zend_Dojo::CDN_BASE_GOOGLE, pero sólo necesita ser el
string del URL antes del número de versión.getCdnBase(): recuperar el CDN de la url base a
utilizar.setCdnVersion($version = null): establecer cuál es la
versión de Dojo a utilizar desde el CDN.getCdnVersion(): recuperar que versión de Dojo será
utilizada desde el CDN.setCdnDojoPath($path): establecer el path relativo a
un archivo dojo.js o dojo.xd.js sobre un CDN; típicamente, uno de los
Zend_Dojo::CDN_DOJO_PATH_AOL o
Zend_Dojo::CDN_DOJO_PATH_GOOGLE, pero sólo debe ser
el string del path detrás del número de versión.getCdnDojoPath(): recuperar el último segmento del
path del CDN de la url apuntando al archivo dojo.js.useCdn(): decirle al contenedor que utilice el CDN;
implícitamente permite integración.setLocalPath($path): decirle al contenedor el path a
una instalación local de Dojo (deberá ser una ruta relativa al servidor, y
contener el propio archivo dojo.js); implícitamente permite integración.getLocalPath(): determinar qué ruta local a Dojo está
siendo utilizada.useLocalPath(): ¿la integración está utilizando un
path local de Dojo?setDjConfig(array $config): conjunto de valores de
configuración dojo/dijit (espera un array asociativo).setDjConfigOption($option, $value): establecer un
único valor de configuración para dojo/dijit.getDjConfig(): obtener todos los valores de
configuración de dojo/dijit.getDjConfigOption($option, $default = null):
conseguir un único valor de configuración de dojo/dijit.addStylesheetModule($module): agregar una hoja de
estilo sobre la base del tema de un módulo.getStylesheetModules(): obtener hojas de estilo
registradas como temas de módulos.addStylesheet($path): agregar una hoja de estilo
local para su uso con Dojo.getStylesheets(): obtener hojas de estilo locales
Dojo.addOnLoad($spec, $function = null): agregar un lambda
para dojo.onLoad para llamadas. Si se pasa un argumento, se supone que que puede
ser tanto el nombre de una función o dar por terminado javascript. Si se pasan
dos argumentos, el primero se supone que es el nombre de la variable de la
instancia de un objeto y el segundo ya sea un nombre de método en ese objeto o
un cierre a utilizar con ese objeto.prependOnLoad($spec, $function = null): exactamente
como addOnLoad(), excluyendo agregar al principio el
comienzo de onLoad stack.getOnLoadActions(): recuperar todas las acciones
dojo.onLoad registradas con el contenedor. Esto será un array de arrays.onLoadCaptureStart($obj = null): capturar los datos
que se utilizarán como lambda para dojo.onLoad(). Si se provee $obj, los códigos
JS capturados serán considerados un cierre a utilizar con ese objeto
Javascript.onLoadCaptureEnd($obj = null): finalizar la captura
de datos para su uso con dojo.onLoad().javascriptCaptureStart(): captura javascript
arbitrario para ser incluido en Dojo JS (onLoad, require, etc.
statements).javascriptCaptureEnd(): finalizar la captura de
javascript.__toString(): emitir el contenedor a un string;
muestra todo el estilo HTML y elementos del script.