我有一个websocket连接,可以在我的application.js控制器中获取实时价格数据。我把它放在这里是因为我希望连接初始化,并且要从任何页面访问数据,而不是每次加载页面都重新连接。
我不知道如何从其他控制器或模板访问这些数据。
我想做的2件事: 1)检查值并在导航栏中的每个页面上更新动态价格。 2)访问其他控制器中的websocket数据。我不知道这是否会影响application.js中已经定义的消息处理程序。我想事件数据应该进入一个变量。
的application.js
headerPrice: 0,
setupWebsocket: function() {
this._super();
var socket = this.get('websockets').socketFor('ws://localhost:7000/');
socket.on('open', this.myOpenHandler, this);
socket.on('message', this.myMessageHandler, this);
socket.on('close', function(event) {
console.log('Websocket closed');
}, this);
}.on('init'),
myOpenHandler: function(event) {
console.log('Websocket Opened: ' + JSON.stringify(event));
},
myMessageHandler: function(event) {
if (event.data == "foo") {
this.headerPrice = event.data.price;
};
}
}
答案 0 :(得分:0)
结束了初始化程序和服务扩展(ember-websocket已经是一项服务)。
<强>初始化器:强>
export function initialize(app) {
app.register('websocket:main', 'websocket', { instantiate: true, singleton: true });
app.inject('controller', 'websocket', 'service:websocket');
app.inject('component', 'websocket', 'service:websocket');
}
export default {
name: 'websocket',
initialize: initialize
};
<强>服务强>
import websocket from 'ember-websockets/services/websockets';
export default websocket.extend({
init: function() {
this._super.apply(this, arguments);
var socket = this.socketFor('ws://localhost:7000', ['echo-protocol']);
console.log('initializing websocket...');
socket.on('open', this.myOpenHandler, this);
socket.on('message', this.myMessageHandler, this);
.....