3
我的后台是给我这个JSON(例如)填充烬数据表:从WebSocket的
{
id: 0,
list: [
{username:'user_1', name:'Name1', surname:'Surname1', user:0},
{username:'user_2', name:'Name2', surname:'Surname2', user:0},
]
}
我有必要引导我的表App.WUser
与该类型JSON的。数据来自WebSocket。我的Ember.js模式定义如下:
App.WUser = DS.Model.extend({
list: DS.hasMany('App.User')
});
App.User = DS.Model.extend({
username: DS.attr('string'), // primary key
name: DS.attr('string'),
surname: DS.attr('string'),
user: DS.belongsTo('App.WUser')
});
我编写了我的custum Adapter for WebSocket实现。请注意,App.WebSocketConnection
是一个包含连接处理程序的Mixin(请参阅最后一个片段)。
DS.SocketAdapter = DS.RESTAdapter.extend(App.WebSocketConnection, {
socket: undefined,
init: function() {
socket = this.getSocket(); // activate WS connection (see Mixin)
this._super();
},
find: function (store, type, id) {
// empty block
},
findAll: function (store, type) {
// empty block
},
createRecord: function(store, type, record) {
// code not relevant
}
});
DS.SocketAdapter.map('App.User', {
primaryKey: 'username'
});
DS.SocketAdapter.map('App.WUser', {
list: {embedded: 'always'}
});
我的商店
App.Store = DS.Store.extend({
revision: 12,
adapter: DS.SocketAdapter.create({})
});
我的密新:
App.WebSocketHandler = Ember.Object.extend({
uri: 'ws://localhost:8080/App/atmosphere/chat/all',
ws: ,
init: function() {
this.ws = new WebSocket(this.uri));
// callbacks
this.ws.onopen = function() {
console.log('Connection established /all');
};
this.ws.onclone = function() {
console.log('Connection closed /' + 'all');
};
this.ws.onmessage = function(data) {
alert('New JSON message from server /all ' + data); // <---- ???
};
this._super();
},
send: function(data) {
// not relevant method... this method simply send a message to the server
/*
var some = ...
this.ws.send(JSON.stringify(some));
*/
}
});
搜索在谷歌,我伸手写这段代码:
var JSONfromWebSocket = {
id: 0,
list: [
{username:'user_1', name:'Name1', surname:'Surname1', user:0},
{username:'user_2', name:'Name2', surname:'Surname2', user:0},
]
};
var store = DS.get('defaultStore');
store.loadMany(App.WUser, [0], JSONfromWebSocket); // should I specify the [0] id?
(?) this.didCreateRecords(store, App.WUser, records(?), undefined); // is it a neccessary line?
问题:
- 我在哪里放了我的代码?
- 我的一段代码是否正确?这是推翻数据的正确方法吗?
- 是否正确使用custum primaryKey?
- 考虑到我的客户ID为
App.User
;调用loadMany()函数是否正确? - 请注意,JSON来自onmessage回调(请参见行
`// <---- ???
)。如何调用适配器继承的函数之一 - 以及哪些 - (即createRecords),并将JSON数据传递给它?
我有点困惑,但我希望我是在正确的方式......我的问题是粘合我的代码块!
感谢您的耐心等待!
马蒂亚
Thaks这么多!它的作用就像一个魅力:[见链接](http://img689.imageshack.us/img689/9505/snapshot6t.png)。一个问题是我的外键看起来是空的(并且被命名为** user_id **,而不是**用户**)。我认为是因为我在我的Adapter之外序列化了我的记录。 (请注意,我不使用自定义序列化器,我应该吗?) – Mattia 2013-05-03 19:18:01
您想要指定用户在App.Adapter.map('App.WUser',{0128} :'load'} };请参阅https://github.com/emberjs/data/blob/master/packages/ember-data/tests/integration/embedded/embedded_loading_test.js#L92 – 2013-05-03 19:21:49
,您还需要使用'inverse'使得数据可以发现'list'是用户存储的地方。请参阅https://github.com/emberjs/data/blob/master/packages/ember-data/tests/integration/inverse_relationships_test.js# L65 – 2013-05-03 19:23:09