| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 20176 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.dojo.data">
- <title>Zend_Dojo_Data: Envolturas de dojo.data</title>
- <para> Dojo proporciona abstracciones de datos para los widgets de datos
- habilitados a través de su componente dojo.data. Este componente
- proporciona la capacidad de adjuntar un datastore, ofrecer algunos
- metadatos relativos al campo identidad, opcionalmente una etiqueta de
- campo, y una <acronym>API</acronym> para efectuar consultas,
- clasificación, recuperación de archivos y conjuntos de registros del
- datastore. </para>
- <para> dojo.data se utiliza a menudo con XmlHttpRequest para traer
- dinámicamente datos desde el servidor. El principal mecanismo para esto
- es extender el QueryReadStore para que apunte a una
- <acronym>URL</acronym> y especificar la información a consultar. El
- lado del servidor después devuelve los datos con el siguiente formato
- <acronym>JSON</acronym> : </para>
- <programlisting language="javascript"><![CDATA[
- {
- identifier: '<name>',
- <label: '<label>',>
- items: [
- { name: '...', label: '...', someKey: '...' },
- ...
- ]
- }
- ]]></programlisting>
- <para>
- <classname>Zend_Dojo_Data</classname> ofrece una interfaz simple para la
- construcción de estas estructuras programáticamente, interactuando con
- ellos, y serializándolos a un array o a <acronym>JSON</acronym> . </para>
- <sect2 id="zend.dojo.data.usage">
- <title>Uso de Zend_Dojo_Data</title>
- <para>En su forma más simple, dojo.data requiere que se proporcione el
- nombre del campo identificador en cada item, y un conjunto de items
- (datos). Puede pasarlos tanto via el constructor, o via
- mutators:</para>
- <example id="zend.dojo.data.usage.constructor">
- <title>Inicialización de Zend_Dojo_Data via constructor</title>
- <programlisting language="php"><![CDATA[
- $data = new Zend_Dojo_Data('id', $items);
- ]]></programlisting>
- </example>
- <example id="zend.dojo.data.usage.mutators">
- <title>Inicialización de Zend_Dojo_Data via mutators</title>
- <programlisting language="php"><![CDATA[
- $data = new Zend_Dojo_Data();
- $data->setIdentifier('id')
- ->addItems($items);
- ]]></programlisting>
- </example>
- <para> También puede añadir un solo item a la vez, o agregar items
- utilizando <methodname>addItem()</methodname> y
- <methodname>addItems()</methodname> . </para>
- <example id="zend.dojo.data.usage.append">
- <title> Agregando datos a Zend_Dojo_Data </title>
- <programlisting language="php"><![CDATA[
- $data = new Zend_Dojo_Data($identifier, $items);
- $data->addItem($someItem);
- $data->addItems($someMoreItems);
- ]]></programlisting>
- </example>
- <note>
- <title>Siempre use un identificador!</title>
- <para> Cada datastore de dojo.data requiere que la columna
- identificadora se proporcione como metadatos, incluyendo
- <classname>Zend_Dojo_Data</classname> . De hecho, si intenta
- añadir items sin un identificador, se generará una excepción.
- </para>
- </note>
- <para>Los items individuales pueden ser uno de los siguientes:</para>
- <itemizedlist>
- <listitem>
- <para>Arrays asociativos</para>
- </listitem>
- <listitem>
- <para> Objectos implementando un método
- <methodname>toArray()</methodname>
- </para>
- </listitem>
- <listitem>
- <para>Cualquiera de los otros objetos (se serializarán via
- get_object_vars())</para>
- </listitem>
- </itemizedlist>
- <para> Puede adjuntar colecciones de los items anteriores via
- <methodname>addItems()</methodname> o
- <methodname>setItems()</methodname> (sobreescribe todos los
- items previamente establecidos); cuando lo haga, puede pasar un solo
- argumento: </para>
- <itemizedlist>
- <listitem>
- <para>Arrays</para>
- </listitem>
- <listitem>
- <para> Objectos implementando la interfaz
- <classname>Traversable</classname> , que incluye las
- interfaces <classname>Iterator</classname> y
- <classname>ArrayAccess</classname> . </para>
- </listitem>
- </itemizedlist>
- <para> Si quiere especificar un campo que actuará como una etiqueta para
- el item, llame a <methodname>setLabel()</methodname> : </para>
- <example id="zend.dojo.data.usage.label">
- <title> Especificando la etiqueta de un campo en Zend_Dojo_Data </title>
- <programlisting language="php"><![CDATA[
- $data->setLabel('name');
- ]]></programlisting>
- </example>
- <para> Por último, también puede cargar un item
- <classname>Zend_Dojo_Data</classname> de un array
- <acronym>JSON</acronym> dojo.data, utilizando el método
- <methodname>fromJson()</methodname> . </para>
- <example id="zend.dojo.data.usage.populate">
- <title>Alimentando Zend_Dojo_Data desde JSON</title>
- <programlisting language="php"><![CDATA[
- $data->fromJson($json);
- ]]></programlisting>
- </example>
- </sect2>
- <sect2 id="zend.dojo.data.metadata">
- <title>Agregando metadatos a sus contenedores</title>
- <para> Algunos componentes de Dojo requieren metadatos adicionales junto
- al conjunto de datos de dojo.data. Como ejemplo,
- <command>dojox.grid.Grid</command> puede tirar datos
- dinámicamente desde un
- <command>dojox.data.QueryReadStore</command> . Para que la
- paginación funcione correctamente, cada conjunto de datos de regreso
- debería contener una clave <property>numRows</property> con el
- número total de filas que podrían ser devueltas por la consulta. Con
- estos datos, la plantilla sabe cuando seguir haciendo pequeños
- pedidos de subconjuntos de datos al servidor y cuando dejar de hacer
- más peticiones (es decir, ha llegado a la última página de datos).
- Esta técnica es útil para despachar grandes conjuntos de datos en
- sus plantillas sin cargar todo el conjunto de una sola vez. </para>
- <para>
- <classname>Zend_Dojo_Data</classname> permite asignar propiedades a
- los metadatos como al objeto. Lo siguiente ilustra su uso: </para>
- <programlisting language="php"><![CDATA[
- // Establece el "numRows" a 100
- $data->setMetadata('numRows', 100);
- // Establece varios items a la vez:
- $data->setMetadata(array(
- 'numRows' => 100,
- 'sort' => 'name',
- ));
- // Inspecciona un único valor de metadatos:
- $numRows = $data->getMetadata('numRows');
- // Inspecciona todos los metadatos:
- $metadata = $data->getMetadata();
- // Elimina un item de metadatos:
- $data->clearMetadata('numRows');
- // Elimina todos los metadatos:
- $data->clearMetadata();
- ]]></programlisting>
- </sect2>
- <sect2 id="zend.dojo.data.advanced">
- <title>Casos Avanzados de Uso</title>
- <para> Además de actuar como un contenedor de datos serializable,
- <classname>Zend_Dojo_Data</classname> también ofrece la
- posibilidad de manipular y recorrer los datos en una variedad de
- formas. </para>
- <para>
- <classname>Zend_Dojo_Data</classname> implementa las interfaces
- <classname>ArrayAccess</classname> ,
- <classname>Iterator</classname> , y
- <classname>Countable</classname> . Por lo tanto, puede usar la
- recopilación de datos casi como si fuera un array. </para>
- <para> Todos los items son referenciados por el identificador de campo.
- Dado que los identificadores deben ser únicos, puede usar los
- valores de este campo para sacar los registros individuales. Hay dos
- maneras de hacer esto: con el método
- <methodname>getItem()</methodname> , o via notación de array. </para>
- <programlisting language="php"><![CDATA[
- // Usando getItem():
- $item = $data->getItem('foo');
- // O usando notación de array:
- $item = $data['foo'];
- ]]></programlisting>
- <para>Si conoce el identificador, puede utilizarlo para recuperar un
- item, actualizarlo, borrarlo, crearlo, o probarlo:</para>
- <programlisting language="php"><![CDATA[
- // Actualizar o crear un item:
- $data['foo'] = array('title' => 'Foo', 'email' => 'foo@foo.com');
- // Borrar un item:
- unset($data['foo']);
- // Efectuar una prueba para un item:
- if (isset($data[foo])) {
- }
- ]]></programlisting>
- <para>También puede hacer un loop sobre todos los items. Internamente,
- todos los items se almacenan como arrays.</para>
- <programlisting language="php"><![CDATA[
- foreach ($data as $item) {
- echo $item['title'] . ': ' . $item['description'] . "\n";
- }
- ]]></programlisting>
- <para>O inclusive contar para ver cuántos ítems tiene:</para>
- <programlisting language="php"><![CDATA[
- echo count($data), " items encontrados!";
- ]]></programlisting>
- <para> Por último, como la clase implementa
- <methodname>__toString()</methodname> , también puede
- convertirlo a <acronym>JSON</acronym> simplemente con "echo" de
- <acronym>PHP</acronym> o convertirlo a string: </para>
- <programlisting language="php"><![CDATA[
- echo $data; // echo como un string JSON
- $json = (string) $data; // conversión a string == conversión a JSON
- ]]></programlisting>
- <sect3 id="zend.dojo.data.advanced.methods">
- <title>Métodos Disponibles</title>
- <para>Además de los métodos necesarios para aplicar las interfaces
- enumeradas anteriormente, están disponibles los siguientes
- métodos.</para>
- <itemizedlist>
- <listitem>
- <para>
- <methodname>setItems($items)</methodname> : establece
- varios items a la vez, sobrescribiendo cualquier item
- que figurase anteriormente en el objeto.
- <varname>$items</varname> debe ser un array o un
- objeto <classname>Traversable</classname> . </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setItem($item, $id = null)</methodname> :
- establece un item individual, opcionalmente puede pasar
- un identificador explícito. Sobreescribe el item si ya
- existe en la colección. Los items válidos incluyen a
- arrays asociativos, objetos implementando
- <methodname>toArray()</methodname> , o cualquier
- objeto con propiedades públicas. </para>
- </listitem>
- <listitem>
- <para>
- <methodname>addItem($item, $id = null)</methodname> :
- añade un item individual, opcionalmente puede pasar un
- identificador explícito. Generará una excepción si el
- item ya existe en la colección. Los items válidos
- incluyen a arrays asociativos, objetos implementando
- <methodname>toArray()</methodname> , o cualquier
- objeto con propiedades públicas. </para>
- </listitem>
- <listitem>
- <para>
- <methodname>addItems($items)</methodname> : agrega
- múltiples items a la vez, añadiendolos a cualquiera de
- los items actuales. Generará una excepción si alguno de
- los nuevos items tiene un identificador concordante a un
- identificador ya existente en la colección.
- <varname>$items</varname> debe ser un array o un
- objeto <classname>Traversable</classname> . </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getItems()</methodname> : recupera todos los
- items como un array de arrays. </para>
- </listitem>
- <listitem>
- <para>
- <methodname>hasItem($id)</methodname> : determina si un
- item con el identificador dado existe en la colección.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getItem($id)</methodname> : recupera un item
- con el identificador dado de la colección; el item
- retornado será un array asociativo. Si ningún item
- coincide, se devolverá un valor <constant>NULL</constant>. </para>
- </listitem>
- <listitem>
- <para>
- <methodname>removeItem($id)</methodname> : elimina de la
- colección un item con el identificador dado. </para>
- </listitem>
- <listitem>
- <para>
- <methodname>clearItems()</methodname> : elimina todos
- los items de la colección. </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setIdentifier($identifier)</methodname> :
- establece el nombre del campo que representa el
- identificador único para cada item en la colección.
- </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getIdentifier()</methodname> : recupera el
- nombre del campo identificador. </para>
- </listitem>
- <listitem>
- <para>
- <methodname>setLabel($label)</methodname> : establece el
- nombre de un campo para ser utilizado como la etiqueta a
- mostrar para un item. </para>
- </listitem>
- <listitem>
- <para>
- <methodname>getLabel()</methodname> : recupera la
- etiqueta del nombre del campo. </para>
- </listitem>
- <listitem>
- <para>
- <methodname>toArray()</methodname> : enviar el objeto a
- un array. Como mínimo, el array contendrá las claves
- 'identifier', 'items', y 'label' si una etiqueta de
- campo ha sido establecida en el objeto. </para>
- </listitem>
- <listitem>
- <para>
- <methodname>toJson()</methodname> : enviar el objeto a
- una representación <acronym>JSON</acronym> . </para>
- </listitem>
- </itemizedlist>
- </sect3>
- </sect2>
- </sect1>
|