我正在使用Pusher与EmberJS和Ember Data。为了避免推送通知回到同一个客户端,我想总是在每个API调用时发送Pusher socketId。
我可以从我的控制器操作中获取socketId,但不知道如何将其发回。
e.g。
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();
答案 0 :(得分:1)
我做了类似的事情,我认为最好的地方是适配器,所以你只需要做一次。我会使用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');
}
});