2009-10-27 6 views
5

no veo nada en la API de lectura que proporciona acceso a lo siguiente: http://api.dojotoolkit.org/jsdoc/1.3.2/dojo.data.api.Read¿Cómo obtengo el recuento de elementos (tamaño) de un datastore de dojo?

+0

Con dojo.data.ItemFileReadStore que puede hacer:. myStore._getItemsArray() Longitud Pero esto es en particular a ese almacén de datos. Me pregunto cuál es la forma correcta de obtener el tamaño de la tienda. – Arlo

+0

Este método es aún más hackish de lo que inicialmente pensé. La matriz no se inicializa hasta que se invoca fetch. Por lo tanto, debe asegurarse de buscar antes de verificar la longitud de la matriz. >>> store._getItemsArray(). Longitud >>> store.fetch() objeto de almacén = Objeto >>> store._getItemsArray(). Longitud 2 – Arlo

Respuesta

1

El formato de los datos de cable de cualquier almacén de datos es completamente específico de la tienda. Para que pueda obtener el recuento total de elementos (y otros metadatos), se debe devolver como parte de la respuesta. Esta es la única forma de hacer paginación del lado del servidor.

Todas las tiendas he implementado esperan los datos para contener un atributo totalCount, así:

{ 
    identifier: 'id', 
    items: [ 
    { id: 123, name: 'aaa', ... }, 
    { id: 456, name: 'bbb', ... }, 
    ... 
    ], 
    totalCount: 525 
} 

La tienda guarda esta cuando la consulta devuelve (en onComplete). El valor luego se expone a través de un método getTotalCount() en la tienda.

Cuando se utiliza junto con las opciones de solicitud start y count, esto le permite tener una buena paginación ajax ("Mostrando 1-50 de 525").

Como esto no forma parte de la API, las implementaciones centrales de la API de lectura no lo implementan. Una forma de esta técnica (similar a lo que he hecho) parece ser implementada por el dojo.data.QueryReadStore, por lo que probablemente también pueda mirar allí.

8

Un ejemplo en dojocampus muestra una forma. Aquí, un parámetro fetch sin query devuelve todos los elementos en la tienda.

var store = new some.Datastore(); 
var gotItems = function(items, request){ 
    console.log("Number of items located: " + items.length); 
}; 
store.fetch({onComplete: gotItems}); 
0

que estaba buscando la respuesta a esta pregunta mediante el almacén JsonRest, y esto parece ser que:

En su servidor, usted debe buscar en la cabecera de la gama en la solicitud para saber qué elementos regresar. El servidor debe responder con una cabecera Content-Range para indicar cuántos están siendo devueltos artículos y cuántos existen elementos en total:

Content-Range: items 0-24/66 

Desde: http://dojotoolkit.org/reference-guide/dojo/store/JsonRest.html

0

El siguiente código que funcionó para mí

// questionStoreReader is a pointer that points to and can read ask.json file 

    var questionStoreReader=new dojo.data.ItemFileReadStore({url:"ask.json"}); 

    questionStoreReader.fetch(
    { 
    onComplete:function(items,request) // items is an array 
     { 
     alert(items.length);// number of items in ask.json 
     }, 
    }) 
Cuestiones relacionadas