访问自定义RESTAdapter的字段

时间:2013-04-29 17:45:27

标签: ember.js websocket adapter ember-data

我想重用我的custum中定义的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
  }
});

套接字属性包含活动的WebSocket连接。当DS.Model更改时,适配器对于保持数据更新非常有用。但是..在Adapter之外重用我的连接的最佳方法是什么?我可以访问套接字属性吗?

有什么想法吗?感谢。

我的商店:

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

1 个答案:

答案 0 :(得分: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();
    ...