如何从sencha touch 2中的json数据中检索值

时间:2012-04-16 10:05:11

标签: sencha-touch jsonp sencha-touch-2

我的模特是:

Ext.define('GS.model.user', {
    extend: 'Ext.data.Model',
    fields: [{
        name: 'id',
        type: 'string'
    }, {
        name: 'username',
        type: 'string'
    }, {
        name: 'email',
        type: 'string'
    }]
});

我的商店代码是:

Ext.define('GS.store.userstore', {
    extend: 'Ext.data.Store',
    requires: 'GS.model.user',
    config: {
        model: 'GS.model.user',
        autoLoad: true,
        // data: [],
        proxy: {
            type: 'ajax',
            url: '/app/mydata.json',
            reader: {
                type: 'json',
                root: 'users'
            }
        }
    },
    listeners: {
        load: function(store) {
            alert(store.getCount());
            console.log(store.getAt[0]);
        }
    }
});

查看代码:

Ext.define('GS.view.userlist', {
    extend: 'Ext.form.Panel',
    xtype: 'userpanel',
    requires: ['GS.store.userstore', 'Ext.form.Panel'],

    config: {
        itemTpl: '{store.get("id"),{sotre.get("username")},{store.get("email")}',
        store: 'userstore'
    }
});

Json数据:

[{
    "users": [{
        "id": "1001",
        "username": "user1",
        "email": "abc@unisys.com"
    }, {
        "id": "1002",
        "username": "user2",
        "email": "abcd@unisys.com"
    }, {
        "id": "1003",
        "username": "user3",
        "email": "abce@unisys.com"
    }, {
        "id": "1004",
        "username": "user4",
        "email": "abcf@unisys.com"
    }]
}]

在谷歌杂务中运行后,我收到了错误:

OPTIONS file:///D:/app/mydata.json?_dc=1334569840508&page=1&start=0&limit=25

资源无法加载。

请告诉我怎么可能? 我如何检索json数据值并将其填充为列表。 帮助我。

5 个答案:

答案 0 :(得分:2)

在网址中使用localhost来运行您的应用

例如:

http://localhost/your_app

答案 1 :(得分:1)

您的json数据似乎不对。

"用户"不应该在所有" id"之间的引号和引号之间。和"用户名"和"电子邮件"陈述:

Json数据:

{
   users:
      [
         { id: "1001", username: "user1" , email:"abc@unisys.com"},
         { id: "1002", username: "user2" , email:"abcd@unisys.com"},
         { id: "1003", username: "user3" , email:"abce@unisys.com"},
         { id: "1004", username: "user4" , email:"abcf@unisys.com"}
      ]
}

答案 2 :(得分:1)

路径错了吗?对我来说,它甚至找不到文件。

proxy: {
        type: 'ajax',
        url : 'app/mydata.json', // CHANGE THIS TO 'app/mydata.json'
        reader: {
            type: 'json',
            root: 'users'
           }} },

我把你的json放到了jsonlint.org并且它通过了,所以我认为这不是问题所在。根据错误,我不认为你的道路是正确的。如果我上面发布的内容不起作用,我会将mydata.json复制到index.html所在的根文件夹中,并将代理URL配置为url:'mydata.json',

答案 3 :(得分:1)

您的代码存在两个问题:

  1. 您的JSON有效,但JSON阅读器无法读取它,因为它是一个数组。如果您删除[],则可以使用

    {
        "users": [
            {
                "id": "1001",
                "username": "user1",
                "email": "abc@unisys.com"
            },
           ...
        ]
    }
    
  2. 在您的阅读器中,您需要使用rootProperty - 而不是root

    reader: {
        type: 'json',
        rootProperty: 'users'
    }
    
  3. 在您的itemTpl中,您可以使用{fieldName}直接访问字段 - 您无需使用store.get('xxx')

    itemTpl: '{username}, {email}'
    
  4. 文件未加载;我不确定。尝试使用其他浏览器,如果仍然无效,请再次检查该文件是否存在。

答案 4 :(得分:0)

在某个位置托管json文件,该文件应该可以通过http.i.e访问。将文件放在本地计算机上运行的任何服务器上,并在商店代理的url部分中提供URL。