正确使用store.loadMany()函数

时间:2013-05-03 10:13:20

标签: ember.js ember-data

我正在试图弄清楚如何从JSON对象填充表。 我的JSON是一个结构化对象:

{ 
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 个答案:

答案 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);