2012-04-11 18 views
1

に関連したモデルを移植私は、次のデータを持っている:は、ネストされたJSON

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

私は店をループによって、これまでのところ、これを行うための一つの方法だけを発見した:

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

をしかし、これは偉大ないないようです。

データを1回ロードするだけです。自分のデータが既に構造化されているので、私は実際に各子供の外来キーを指定したくありません。

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

答えて

5

私はそれを修正したと考えます。そして、それは外部キーを必要とせずにその関連付けを生成し、すべてのモデルに移入されます

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

:どうやらあなたは、このように、でもそのわずかメモリ1つが、お店でリーダーを使用する必要があります。

私は、プロキシがなければ、データは別の方法で読み込まれていると仮定していますが、これはモデルにデータを入力しません。

関連する問題