dojo() Ayudante de Vista
El 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 Dojo
Dojo 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 Dojo
Para 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 Disponibles
El 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.