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 に答える