我正在学习secha touch,我想创建一个页面,在该页面中,用户输入登录凭据后,将接收JSON响应,如下所示

  {"items":[{"id":"78e221c8-bbc1-4754-8471-48c863886869","createTime":"2014-05-22T14:57:39.039Z","createUser":"Jon","status":"SAVED","changeTime":"2014-05-22T14:57:39.039Z","changeUser":"Jon","projectId":"63886869-bbc1-4754-8471-48c878e221c8","reportVersionNumber":"1","reportVersionName":"First Version","reportName":"FooBarBaz","reportHash":"qiyh4XPJGsOZ2MEAyLkfWqeQ"}],"totalItems":1

}


目前,我已经创建了一个页面,其中我使用了listItem并从Simple数组中显示了其中的项目,其中Simple数组中已对数据进行了编码
并使用itemTPL来获取它
像这样<div class="arHeadline">{projectId}

我目前的商店是

 data: [
                {
                    Headline: 'Panel',
                    Author: 'Sencha',
                    Content: 'Panels are most useful as Overlays - containers that float over your appl..'
            }


但是我想从json中获取数据,所以我创建了一个JSON存储

Ext.define('MobileChecklist.store.MyJsonPStore', {
    extend: 'Ext.data.Store',

    requires: [
        'MobileChecklist.model.MyModel',
        'Ext.data.proxy.JsonP',
        'Ext.data.reader.Json',
        'Ext.data.Field'
    ],

    config: {
        autoLoad: true,
        data: [
            {
                items: [
                    {
                        id: '78e221c8-bbc1-4754-8471-48c863886869',
                        createTime: '2014-05-22T14:57:39.039Z',
                        createUser: 'Jon',
                        status: 'SAVED',
                        changeTime: '2014-05-22T14:57:39.039Z',
                        changeUser: 'Jon',
                        projectId: '63886869-bbc1-4754-8471-48c878e221c8',
                        reportVersionNumber: '1',
                        reportVersionName: 'First Version',
                        reportName: 'FooBarBaz',
                        reportHash: 'qiyh4XPJGsOZ2MEAyLkfWqeQ'
                    }
                ],
                totalItems: 1
            }
        ],
        model: 'MobileChecklist.model.MyModel',
        storeId: 'MyJsonPStore',
        proxy: {
            type: 'jsonp',
            url: 'data/getPort.json',
            reader: {
                type: 'json',
                idProperty: 'id',
                rootProperty: 'items',
                totalProperty: 'totalItems',
                record: 'items'
            }
        },
        fields: [
            {
                name: 'reportName'
            },
            {
                name: 'projectId'
            }
        ]
    }
});


我的模型是

Ext.define('MobileChecklist.model.MyModel', {
    extend: 'Ext.data.Model',

    requires: [
        'Ext.data.Field'
    ],

    config: {
        fields: [
            {
                mapping: 'items.reportName',
                name: 'reportName',
                type: 'string'
            },
            {
                mapping: 'items.projectId',
                name: 'projectId',
                type: 'string'
            }
        ]
    }
});


我想解码json响应并以与字符串数组相同的方式在ListItem中显示它
我该怎么办,请帮忙

编辑:
如果我从json响应中删除项目并将其设置为数组而不是对象,则它可以工作并在列表视图中显示

[{"id":"78e221c8-bbc1-4754-8471-48c863886869","createTime":"2014-05-22T14:57:39.039Z","createUser":"Jon","status":"SAVED","changeTime":"2014-05-22T14:57:39.039Z","changeUser":"Jon","projectId":"63886869-bbc1-4754-8471-48c878e221c8","reportVersionNumber":"1","reportVersionName":"First Version","reportName":"FooBarBaz","reportHash":"qiyh4XPJGsOZ2MEAyLkfWqeQ"}],"totalItems":1}]

最佳答案

在控制器中使用data.items设置存储数据,如下所示:-

       Ext.Ajax.request({
            url: someurl,
            params: {
                format: "json"
            },
            success: function(response) {
               Ext.getStore("MyJsonPStore").setData(response.items);
            },
            failure: function(err) {
               console.log("Error", err);
            }
        });


这是使用json数据的方式。

发现您的问题,请将您的商店代理更改为:-

 proxy: {
            type: 'rest',  //change it
            url: 'data/getPort.json',
            reader: {
                type: 'json',
                idProperty: 'id',
                rootProperty: 'items',
                totalProperty: 'totalItems'
            }
        }


无需映射数据。

08-18 16:42