Sencha Touch no lee datos

Tengo mi modelo como este:

Ext.define("NotesApp.model.Note", {
    extend: "Ext.data.Model",
    config: {
        idProperty: 'id',
        fields: [
            { name: 'id', type: 'int' },
            { name: 'dateCreated', type: 'date', dateFormat: 'c' },
            { name: 'question', type: 'string' },
            { name: 'answer', type: 'string' },
            { name: 'type', type: 'int'},
            { name: 'author', type: 'int'}
        ],
        validations: [
            { type: 'presence', field: 'id' },
            { type: 'presence', field: 'dateCreated' },
            { type: 'presence', field: 'question', message: 'Please enter a question for this card.' }
        ]
    }
});

y mi página de servidor (qa.php) genera esto:

{"results":[{"id":"1","dateCreated":"2012-05-01","question":"asdf?","answer":"fdsa","type":"0","author":"0"},{"id":"2","dateCreated":"2012-05-01","question":"qwer?","answer":"rewq","type":"0","author":"0"}]}

y este es mi código en la tienda:

Ext.define("NotesApp.store.Online", {
    extend: "Ext.data.Store",
           config: {
           model: 'NotesApp.model.Note',
           storeId: 'Online',
           proxy: {
               type: 'jsonp',
               url: 'http://xxxxxxxx.com/qa.php',
               reader: {
                   type: 'json',
                   rootProperty: 'results'
               }
           },
           autoLoad: false,
           listeners: {
               load: function() {   
                   console.log("updating");

                   Ext.getStore('Notes').getProxy().clear();
                   console.log("updating1");

                   // Loop through records and fill the offline store                       

                   this.each(function(record) {
                             console.log("updating2");
                             Ext.getStore('Notes').add(record.data);

                   });

                   // Sync the offline store
                   Ext.getStore('Notes').sync();
                   console.log("updating3");
                   // Remove data from online store
                   this.removeAll();
                    console.log("updated");
               }

           },
           fields: [
                    {
                    name: 'id'
                    },
                    {
                    name: 'dateCreated'
                    },
                    {
                    name: 'question'
                    },
                    {
                    name: 'answer'
                    },
                    {
                    name: 'type'                    
                    },
                    {
                    name: 'author'
                    }
                    ]
           }
});

Pero cuando llamé Ext.getStore('Online').load(), la consola mostró "actualización", "actualización1" y "actualización3", pero no "actualización2", es decir. no se encontraron registros. Me pregunto donde esta el error? ¿Hay alguna forma de generar el jsonstring que se lee?

preguntado el 22 de mayo de 12 a las 16:05

tratan console.log(this) justo antes de this.each, ¿Qué obtuviste? además, console.log(Ext.getStore('Online'))? -

Obtuve TypeError: JSON.stringify no puede serializar estructuras cíclicas. para ambos -

1 Respuestas

Este es un alcance diferente

listeners: {
           load: function() {   
               console.log("updating");

               Ext.getStore('Notes').getProxy().clear();
               console.log("updating1");

               // Loop through records and fill the offline store                       

               this.each(function(record) {
                         console.log("updating2");
                         Ext.getStore('Notes').add(record.data);

               });

               // Sync the offline store
               Ext.getStore('Notes').sync();
               console.log("updating3");
               // Remove data from online store
               this.removeAll();
                console.log("updated");
           },
this//adds scope

or

listeners: {
           load: function(store,record,options) {   
               console.log("updating");

               Ext.getStore('Notes').getProxy().clear();
               console.log("updating1");

               // Loop through records and fill the offline store                       

               store.each(function(record) {
                         console.log("record"); //wahei records!
                         Ext.getStore('Notes').add(record.data);

               });

               // Sync the offline store
               Ext.getStore('Notes').sync();
               console.log("updating3");
               // Remove data from online store
               this.removeAll();
                console.log("updated");
           }

contestado el 22 de mayo de 12 a las 17:05

Thx Alex, cambié al segundo método, sin embargo, todavía no entro en cada bloque {} ... ¿hay alguna manera de verificar cuál fue la lectura de entrada json? - james gu

console.log(store) debería tener store.data.items[i].data - Alex

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