2013-04-29 85 views
1

我想重用我的websocket连接在我的custum中定义Adapted。定义如下适配:访问custum的字段RESTAdapter

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

插座属性保存活性WebSocket连接。在DS.Model更改时,适配器对保持数据更新非常有用。但..什么是在适配器外部重用我的连接的最佳方式?我可以访问插座属性吗?

任何想法?谢谢。

我的店:

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

为什么要重用连接?套接字属性应该可以在适配器上访问。 – 2013-04-29 18:18:19

+0

是的。但是我有必要通过WebSocket发送消息给连接到服务器的另一个客户端。用几句话我写了一个聊天应用程序; DS.Model表示用户配置文件,但我会向服务器发送一条消息(使用我自己的协议,以便不影响模型行为) – Mattia 2013-04-29 19:22:46

+0

我不知道您的应用中有哪些模型,但我可以想象这样的事情:App.User有很多App.Message。在这种情况下,您可以在创建/更新消息时在您的适配器中重用您的套接字。 – 2013-04-29 19:57:13

回答

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

编辑:关于封装的意见在这里不同的解决方案后,您可以创建一个混合,并用它为需要访问共享插槽,组成图案中的每个对象。例如:

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(); 
    ... 
+0

感谢您的重播。这是一个可以接受的回应。但我认为我应该关心'封装',所以我会通过DS.Model,为我的目的 – Mattia 2013-04-30 15:38:46

+0

我增加了一个灵感只有更多的想法:) – intuitivepixel 2013-04-30 16:25:35

+0

哇谢谢你的想法!我非常感激!我应该多了解一下custum Mixin!谢谢两次! – Mattia 2013-04-30 19:26:43