1

我正在尝试将特定的 json 文件加载到列表视图中;但是 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' ]
    }
});
4

1 回答 1

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'
        }
    }
});

注意 readertype现在是custom

我用你的数据在本地测试了它,它似乎工作得很好。

于 2012-04-24T21:21:38.963 回答