2

我试图弄清楚如何从 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') 
});

我正在为 ember-data 使用自定义适配器:

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]}

提前致谢!!

4

1 回答 1

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);
于 2013-05-03T15:23:32.803 回答