0

私は次のようにロードしたい利用可能なデータを持っています:

{
"success": true,
"message": null,
"total": null,
"data": [{
    "clockTypes": ["_12", "_24"],
    "speedTypes": ["MPH", "KMPH"],
    "scheduleTypes": ["DEFAULT", "AUTO"]
}]}

私は通常、このようなデータをロードしています

Ext.define('MyApp.store.comboTimezone', {
extend: 'Ext.data.Store',

constructor: function(cfg) {
    var me = this;
    cfg = cfg || {};
    me.callParent([Ext.apply({
        autoLoad: true,
        storeId: 'MyJsonStore5',
        proxy: {
            type: 'ajax',
            url: 'json/timezone.json',
            reader: {
                type: 'json',
                root: 'data'
            }
        }
    }, cfg)]);
}});

コンボボックスの 1 つのレコードとしてクロックタイプを取得するようになりました。コンボボックスで _12 と _24 の 2 つのレコードを取得するにはどうすればよいですか?

4

1 に答える 1

0

あなたrootはそうあるべきです...data.clockTypes私は-思います-(それがうまくいくかどうかは本当にわかりませんが。)

データをロードするためにそのajax呼び出しをハイジャックするのは少し厄介です。なぜなら、それはストアが消費するのに実際には正しい形式ではないからです(そうですか?)

理想的には...

{
"success": true,
"message": null,
"total": null,
"data": [{
   name: "_12", name:"_24"]
}]}

constructor: function(cfg) {
var me = this;
cfg = cfg || {};
me.callParent([Ext.apply({
    autoLoad: true,
    storeId: 'MyJsonStore5',
    valueField:'name',
    displayField:'name',
    proxy: {
        type: 'ajax',
        url: 'json/timezone.json',
        reader: {
            type: 'json',
            root: 'data'
        }
    }
}, cfg)]);
}});

これはあなたがより多くのajax呼び出しで終わることを意味しますが。または、1つのajax呼び出しから3つのコンボボックスにデータを入力することに心を決めている場合(私はそれがあなたがやろうとしていることだと思います)、Ext.request(からのデータに基づいて動的にストアを生成する必要があります)。

ただし、データを混乱させることができない場合は、次のことができます...

    Ext.define('MyApp.store.comboTimezone', {
    extend: 'Ext.data.Store',

    constructor: function(cfg) {
        var me = this;
        cfg = cfg || {};
        Ext.define('TZ', extend: 'Ext.data.Model',
        fields: [{
            name: 'name'
        }])
        me.callParent([Ext.apply({
            autoLoad: true,
            model: 'TZ',
            storeId: 'MyJsonStore5',
            proxy: {
                type: 'ajax',
                url: 'json/timezone.json',
                reader: {
                    type: 'json',
                    root: 'data'
                }
            }
        }, cfg)]);
        //hacky, but works i guess
        Ext.Ajax.request({
            url: 'my.json',
            success: function(response) {
                var text = response.responseText;
                var json = Ext.JSON.decode(text);
                for(var i =0);i<json.data.lenght();i++;){
                    Ext.data.StoreManager.lookup('MyJsonStore5').add(Ext.create('TZ',{name:json.data[i]}))
                }
            }
        });
    }
});

*バグを作成するタイプミスを禁止します。

基本的に、URLを呼び出し、生のjsonとしてデータを取得してから、ストアが読み取れる形式に処理します。

残念ながら、これはちょっとしたハックです。

于 2012-06-11T09:07:19.403 に答える