在keycha touch 2中读取带有键的json:ext.store中的值

时间:2012-04-24 19:44:23

标签: ajax json sencha-touch-2

我正在尝试将特定的json文件加载到listview中;但是,sencha代理似乎并不理解“CurrencyName”和“Value”的密钥对。我对如何将这两个值与可用数据相关联一无所知。

这是json:

{
    "timestamp": 1335294053,
    "base": "USD",
    "rates": {
        "AED": 3.6732,
        "AFN": 48.32,
        "ALL": 106.040001
    }
}

我的商店:

proxy: {
    type: 'ajax',
    url: 'http://localhost/CurrencyFX/latest.json',
    reader: {
        type: 'json',
        rootProperty: 'rates'
    }
},

我的模特:

Ext.define('CurrencyFX.model.Currency', {
    extend: 'Ext.data.Model',
    config: {
        fields: [ 'name', 'value' ]
    }
});

1 个答案:

答案 0 :(得分:4)

您需要编写自己的JSON读取器子类才能使其正常工作,因为您处理的数据不是数组。

谢天谢地,这样做很简单。这是应该做的事情:

Ext.define('Ext.data.reader.Custom', {
    extend: 'Ext.data.reader.Json',
    alias : 'reader.custom',

    getRoot: function(data) {
        if (this.rootAccessor) {
            data = this.rootAccessor.call(this, data);
        }

        var values = [],
            name;

        for (name in data) {
            values.push({
                name: name,
                value: data[name]
            });
        }

        return values;
    }
});

适用于以下商店配置:

var store = Ext.create('Ext.data.Store', {
    fields: ['name', 'value'],
    autoLoad: true,
    proxy: {
        type: 'ajax',
        url: '0000.json',
        reader: {
            type: 'custom',
            rootProperty: 'rates'
        }
    }
});

请注意,读者type现在是自定义

我在本地使用您的数据进行了测试,看起来效果很好。