gpt4 book ai didi

json - 从 WebSocket 填充 ember-data 表

转载 作者:行者123 更新时间:2023-12-01 01:06:22 25 4
gpt4 key购买 nike

我的后端向我发送这个 JSON(示例):

{
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')
});

我为 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 ) );
*/
}

});

在 Google 上搜索,我开始编写这段代码:

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?

问题:

  1. 我把我的代码放在哪里?
  2. 我的代码正确吗?这是提升数据的正确方法吗?
  3. custum primaryKey 的用法是否正确?
  4. 考虑到表的自定义 ID App.User ;对 loadMany() 函数的调用是否正确?
  5. 请注意,JSON 来自 onmessage 回调(参见 `// <---- ??? 行)。如何调用适配器继承的函数之一(即 createRecords),并将 JSON 数据传递给它?

我有点困惑,但我希望我的方法是正确的...我的问题是粘合我的代码片段!

感谢耐心等待!

马蒂亚

最佳答案

看起来您一次只能获得一个 App.WUser

像这样

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) {
DS.get('defaultStore').load(App.WUser, data); //Simply load your json in the store.
};

this._super();
},

关于json - 从 WebSocket 填充 ember-data 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16346631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com