1

カスタム 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 接続を保持します。Adapter は、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 に答える