1

特定のjsonファイルをリストビューにロードしようとしています。しかし、sencha プロキシは "CurrencyName" と "Value" のキー ペアを理解していないようです。これらの 2 つの値を使用可能なデータに関連付ける方法がわかりません。

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

リーダーtypecustomになっていることに注意してください。

私はこれをあなたのデータでローカルにテストしましたが、うまくいくように見えました。

于 2012-04-24T21:21:38.963 に答える