使用Ember Data发送其他参数

时间:2014-07-28 10:00:20

标签: javascript ember.js ember-data

我正在使用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();

1 个答案:

答案 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');
    }
});