Cómo configurar ExtJS 4 Store (proxy y lector) para leer metadatos

Mi pregunta es cómo obtener metadatos además de totalRecords, en mi caso es versión, código, consulta de búsqueda (mire json).

{
"result": {
    "version":"1",
    "code":"200",
    "searchquery": "false",
    "totalRecords": "2",
    "account":[
            {
                "lastname": "Ivanoff", 
                "firstname": "Ivan", 
                "accountId":"1"
            },
            {
                "lastname": "Smirnoff", 
                "firstname": "Ivan", 
                "accountId":"2"
            }
        ]
}

}

Aquí está mi modelo:

Ext.define("test.Account", {
    extend: "Ext.data.Model",
    fields: [
        {name: 'accountId', type: 'string'},
        {name: 'lastname', type: 'string'},
        {name: 'firstname', type: 'string'}    
    ]
});

Y almacenar:

Ext.define("test.TestStore", {
    extend: "Ext.data.Store",
    model: "test.Account",
    proxy: {
        type: "ajax",
        url: "users.json",  
        reader: {
            type    : 'json',
            root    : 'result.account',
            totalProperty: "result.totalRecords"
        }
    },

    listeners: {
        load: function(store, records, success) {
            console.log("Load: success " + success);     
        }
    }
});

Al usar esta tienda, puedo cargar registros (cuenta) y no puedo encontrar ningún método para acceder al resto de los campos.

Gracias de antemano.

preguntado el 12 de junio de 12 a las 17:06

3 Respuestas

Aquí está la solución para mi problema. Estoy manejando el evento afterRequest en la clase Proxy donde puedo obtener datos de respuesta, analizarlos y guardar metadatos. Esta es una parte del proxy de la clase TestStore:

Así que aquí está la parte del proxy de la clase TestStore:

proxy: {
        type: "ajax",
        url: "/users.json",  
        reader: {
            type    : 'json',
            root    : 'gip.account',
            totalProperty: "gip.totalRecords",
            searchquery: "searchquery"
        },
        afterRequest: function(req, res) {
            console.log("Ahoy!", req.operation.response);    
        }
    }

Respondido el 13 de junio de 12 a las 17:06

Es posible utilizar el evento 'metacambio' de la tienda.

Toda la información específica no extjs se puede agrupar en JSON en el objeto separado:

{
    "result": {
        "totalRecords": "2",
        "account":[
            {
                "lastname": "Ivanoff", 
                "firstname": "Ivan", 
                "accountId":"1"
            },
            {
                "lastname": "Smirnoff", 
                "firstname": "Ivan", 
                "accountId":"2"
            }
        ]
    },
    "myMetaData": {
        "version":"1",
        "code":"200",
        "searchquery": "false"
    }
}

La tienda está configurada como

Ext.define("test.TestStore", {
    extend: "Ext.data.Store",
    model: "test.Account",
    proxy: {
        type: "ajax",
        url: "users.json",  
        reader: {
            type    : 'json',
            root    : 'result.account',
            totalProperty: "result.totalRecords",
            metaProperty: 'myMetaData'
        }
    },

    listeners: {
        metachange: function(store, meta) {
            console.log("Version " + meta.version + "Search query " + meta.searchQuery);     
        }
    }
});

respondido 26 nov., 12:14

Echa un vistazo a Ext.data.Proxy clase y más específicamente processResponse() método. Si necesita extraer datos adicionales, deberá extender la clase estándar y cambiar ese método.

Respondido el 12 de junio de 12 a las 18:06

Revisé la clase de proxy. docs.sencha.com/ext-js/4-1/#!/api/Ext.data.proxy.Proxy - no encontrar processResponse() método allí. Estoy encontrando uno en Ext.form.action.Action. ¿Puedes hacer que esta respuesta sea un poco más clara? - Jom

comprobar Ext.data.proxy.Server clase en 4.0.7 (creo que OP tiene ExtJs4 no 4.1, pero deberían ser relativamente similares) - sha

gracias por la sugerencia con el método processResponse, pero estoy trabajando con la versión 4.1 y decidí no tocar los archivos del marco. Sin embargo, encontré otra solución para mi problema. La clase de proxy tiene un evento afterRequest, manejando este evento puedo obtener datos de respuesta con todos los campos de metadatos. - barmaleikin

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.