我正在使用带有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');
    }
});

07-26 02:31