1

私は次のデータを持っています:

var data = [
    {
        id: 1,
        name: 'Ed Spencer',
        phoneNumber: '555 1234',
        children: [{
          id: 11,
          name: 'Baz'
        }]
    },
    {
        id: 2,
        name: 'Abe Elias',
        phoneNumber: '666 1234',
        children: [{
          id: 21,
          name: 'Foo'
        },{
          id: 21,
          name: 'Bar'
        }]
    }
];

このように、いくつかのモデルやストアにロードする方法はありますか?

Ext.define('Child', {
    extend: 'Ext.data.Model',
    fields: [
        {name: 'id',    type: 'int'},
        {name: 'user_id',    type: 'int'},
        {name: 'name',  type: 'string'}
    ],

    belongsTo: 'User'
});

Ext.define('User', {
    extend: 'Ext.data.Model',
    fields: [
        {name: 'id',    type: 'int'},
        {name: 'name',  type: 'string'},
        {name: 'phone', type: 'string', mapping: 'phoneNumber'}
    ],

    hasMany: {model: 'Child', name: 'children'}
});

var store = Ext.create('Ext.data.Store', {
    autoLoad: true,
    model: 'User',
    data : data
});

これまでのところ、ストアをループすることでこれを行う方法は1つしか見つかりませんでした。

store.each(function(r){
  r.childrens().loadData(r.data.children);
});

しかし、これは素晴らしいとは思えません。

データを1回だけロードしたい。私のデータはすでに構造化されているので、各子に外部キーを指定する必要はありません。

誰かが似たようなことをしましたか?これにアプローチするためのより良い方法はありますか?

4

1 に答える 1

5

私はそれを修正したと思います。どうやら、次のように、単なるメモリの場合でも、ストアでリーダーを使用する必要があるようです。

var store = Ext.create('Ext.data.Store', {
    autoLoad: true,
    model: 'User',
    data : data,
    proxy: {
        type: 'memory',
        reader: {
            type: 'json'
        }
    }
});

次に、すべてのモデルにデータを入力し、外部キーを必要とせずに関連付けを生成します。

プロキシがないと、データが別の方法で読み込まれ、モデルにデータが入力されないと想定しています。

于 2012-04-12T08:31:50.550 に答える