我想重用我的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({})
});
答案 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();
...