Sencha Touch 1.1.1 вложенная загрузка JSON Store - PullRequest
1 голос
/ 19 декабря 2011

Привет, ребята, я надеюсь, что кто-то может помочь мне с этим, я действительно застрял, хотя на этот проклятый вопрос новичка уже дан ответ, и я уверяю вас, что я прочитал все ответы на сообщения, но все еще не могу получить егоработа.

Я использую Sencha Touch 1.1.1 и пытаюсь загрузить этот магазин вложенными данными JSON.Вот код:

    Ext.regModel("UserData", {

        hasMany : [{
            name : "id",
            type : "integer",
        },{
            name : "username",
            type : "string",
        },{
            name : "password",
            type : "string",
        }]

    });

    var userdata = 
        {"users": [
                  {
                      "id": 16,
                      "username": "bla@bla.com",
                      "password": "bla",
                  }, {
                      "id": 17,
                      "username": "bla@bla.com",
                      "password": "bla",
                  }
                 ]
        };


    var myStore = new Ext.data.Store({

        model : 'UserData',
        data : userdata,
        proxy : {
            type : 'ajax',             

            reader : {
                type : 'json',
                root : 'users'      // not working          
            }
        }

    });

    var myList = new Ext.List ({

        fullscreen : true,
        store : myStore,
        grouped : false,
        itemTpl : '<div>{username}</div>'

    });

Возвращает Uncaught Type Error: список аргументов имеет неправильный тип.Когда я переписываю JSON с внешней оболочкой Array, он работает, но с неверным root (не для пользователей), я определенно видел примеры, где это работало с root: '' value.

var userdata = 
    [ {"users": [
              {
                  "id": 16,
                  "username": "bla@bla.com",
                  "password": "bla",
              }, {
                  "id": 17,
                  "username": "bla@bla.com",
                  "password": "bla",
              }
             ]
    } ];

Чего мне не хватает

1 Ответ

0 голосов
/ 19 декабря 2011

Если я не ошибаюсь, в вашей модели "UserData" она должна быть fields вместо hasMany.

И попробуйте поместить ваши данные json в отдельный файл json и найдите путь в прокси вашего магазина.

var myStore = new Ext.data.Store({
model: 'UserData',
autoLoad: true,
proxy: {
    type: 'ajax',
    url: 'test.json',
    reader: {
        type: 'json',
        root: 'users'
    }
}
});

Я проверил его, и он работает нормально.Вот мой полный код.

    Ext.regModel("UserData", {

    fields: [
            {name: 'id', type:'int'},
            {name: 'username', type:'string'},
            {name: 'password', type:'string'}

    ]
});


var myStore = new Ext.data.Store({
    model: 'UserData',
    autoLoad: true,
    proxy: {
        type: 'ajax',
        url: 'test.json',
        reader: {
            type: 'json',
            root: 'users'
        }
    }
});


var app = new Ext.Application({
    name: 'TestApp',
    useLoadMask: true,
    launch: function() {


        TestApp.views.listToolbar = new Ext.Toolbar({
            title: 'Foo Bar',
            layout: 'hbox'
        });

        TestApp.views.list = new Ext.List({
            id: 'list',
            store: myStore,
            emptyText: 'Nothing',
            itemTpl: '<div class="username">{username}</div>',
        });

        TestApp.views.container = new Ext.Panel({
            layout: 'fit',
            html: 'this is the container',
            dockedItems: [TestApp.views.listToolbar],
            items: [TestApp.views.list]
        });

        TestApp.views.viewport = new Ext.Panel({
            fullscreen: true,
            layout: 'card',
            cardAnimation: 'slide',
            items: [
                TestApp.views.container
            ]
        });
    }
});
...