2013-05-03 89 views
2

我想弄清楚如何從JSON對象填充表。 我的JSON是structurated對象:正確使用store.loadMany()函數

{ 
id: 0, 
list: [{ username:'user_1',online:true, user:0 }, 
{ username:'user_2',online:true, user:0 }] 
} 

我的模型定義如下:

MyTalk.WUser = DS.Model.extend({ 
list: DS.hasMany('MyTalk.User') 
}); 

MyTalk.User = DS.Model.extend({ 
username: DS.attr('string'), // primary key 
online: DS.attr('boolean'), 
user: DS.belongsTo('MyTalk.WUser') 
}); 

我使用的是自定義的適配器燼數據:

DS.SocketAdapter = DS.RESTAdapter.extend(MyTalk.WebSocketConnection, { 
// code not relevant 
} 

DS.SocketAdapter.map('MyTalk.WUser', { 
list: {embedded: 'always'} 
}); 

DS.SocketAdapter.map('MyTalk.User', { 
primaryKey: 'username' 
}); 
MyTalk.Store = DS.Store.extend({ 
revision: 12, 
adapter: DS.SocketAdapter.create({}) 
}); 

現在我會加載我的數據。我在Chrome命令行運行下面的語句

var store = DS.get('defaultStore'); 

var obj = { 
id: 0, 
list: [{ username:'user_1',online:true, user:0 }, 
{ username:'user_2',online:true, user:0 }] 
}; 

var store.loadMany(MyTalk.WUser,obj); 

var record = MyTalk.WUser.find(0); 
record.serialize(); 

但它沒有返回記錄:

> Object {list: Array[0]} 

在此先感謝!

回答

1

如果您希望允許適配器反序列化嵌入式記錄(或執行任何自定義反序列化),則需要通過適配器而不是直接將數據加載到存儲中。

var store = DS.get('defaultStore'), 
    obj = { 
     id: 0, 
     list: [{ username:'user_1', online:true, user:0 }, 
      { username:'user_2', online:true, user:0 }] 
    }, 
    type = MyTalk.WUser, 
    adapter = store.adapterForType(type); 

adapter.load(store, type, obj); 
+0

是否有類似的方式來「loadMany」 – Intentss 2013-06-19 14:59:33