2012-04-11 78 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); 
}); 

但這似乎不是很大。

我只想加載一次數據。因爲我的數據已經結構化,所以我不想在每個孩子中指定外鍵。

有沒有人做過類似的事情?有沒有更好的方法來解決這個問題?

回答

5

認爲我已修復它。顯然,你需要在你的商店使用閱讀器,即使它只是一個內存中的一個,像這樣:

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

然後將填充所有車型,其產生的關聯,而不需要外鍵。

我假設沒有代理,數據以不同的方式加載,這不會填充我的模型。