Ember控制器数据从其他地方访问

时间:2017-10-03 07:47:07

标签: ember.js

我有一个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;
  };
}

}

1 个答案:

答案 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);
    .....