1

我会重用在我的 custum Adapted 中定义的 websocket 连接。Adapted 定义如下:

DS.SocketAdapter = DS.RESTAdapter.extend({ 

  socket: undefined,

  init: function(){    
    this.socket = new App.WebSocketHandler("ws://my-cool-connection");
    this._super();
  },

  find: function (store, type, id){
    // override: use this.socket     
  },

  findAll: function (store, type){ 
    // override: use this.socket
  },

  createRecord: function(store, type, record){
    // override: use this.socket
  }
});

socket属性持有一个活动的 WebSocket 连接。当 DS.Model 发生变化时,适配器对于保持数据更新非常有帮助。但是..在适配器之外重用我的连接的最佳方法是什么?我可以访问套接字属性吗?

有任何想法吗?谢谢。

我的店铺:

App.Store = DS.Store.extend({
    revision: 12, adapter: DS.SocketAdapter.create({})
});
4

1 回答 1

1

为什么不像这样在应用程序级别存储引用?

App.mySharedSocket = Ember.Object.extend({});

...

DS.SocketAdapter = DS.RESTAdapter.extend({ 
  socket: undefined,
  init: function(){
    this.socket = new App.WebSocketHandler("ws://my-cool-connection");
    App.set('mySharedSocket', this.socket);
    ...

编辑:在这里关于封装的评论是一个不同的解决方案,您可以创建一个 Mixin 并将它用于需要访问共享套接字的每个对象,组合模式。例子:

App.SharedSocket = Ember.Mixin.create({
    socket: null,
    getSocket: function() {
        // Lazy creation
        if(!this.get('socket')) {
            this.set('socket', new App.WebSocketHandler("ws://my-cool-connection"));
        }
        return this.get('socket');
    }
});

DS.SocketAdapter = DS.RESTAdapter.extend(App.SharedSocket, {
  init: function(){
    // do what you want with your socket
    var mySocket = this.getSocket();
    ...
于 2013-04-29T22:22:34.023 回答