我正在使用带有EmberJS和Ember Data的Pusher。为了避免推送通知返回到同一客户端,我想始终随每个API调用一起发送Pusher socketId。
我可以从控制器的动作中获取socketId,但是不知道如何将其发送回去。
例如
var socketId = this.pusher.get('socketId');
var project = this.get("model");
project.save();
问题是,每个控制器的socketId将不同。所以我不能直接在适配器中做到这一点。
这样的事情将是理想的...
var socketId = this.pusher.get('socketId');
var project = this.get("model");
project.ajaxParams = { socketId: socketId };
project.save();
最佳答案
我做了类似的事情,我认为最好的方法是在适配器中,所以您只需要做一次。我将使用RESTAdapter
给出示例,因为它是最常见的,但它可能适用于任何适配器。
App.ApplicationAdapter = DS.RESTAdapter.extend({
ajaxOptions: function(url, type, hash) {
var options = this._super(url, type, hash);
options.headers = options.headers || {};
// I don't know what `pusher` is, but you can always inject it into your adapter
options.headers.socketId = this.pusher.get('socketId');
return options;
}
});
现在,每个API请求都将包含
socketId
标头。编辑:注入推杆:
Ember.Application.initializer({
name: 'injectPusherIntoStore',
after: 'pusherConnected',
initialize: function(container, application) {
application.inject('adapter', 'pusher', 'pusher:main');
}
});