【问题标题】:Sending additional parameters with Ember Data使用 Ember 数据发送附加参数
【发布时间】:2014-07-29 00:14:19
【问题描述】:

我将 Pusher 与 EmberJS 和 Ember Data 一起使用。为了避免推送通知返回到同一个客户端,我希望始终在每次 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();

【问题讨论】:

    标签: javascript ember.js ember-data


    【解决方案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');
        }
    });
    

    【讨论】:

    • 我试试看!希望它会奏效。我假设 ajaxOptions 在每个请求上运行,因为 socketId 是动态的。
    • 似乎在适配器中无法使用推送器。我将如何从控制器中注入它?
    • pusher 是偶然的单身人士吗?这听起来像是您希望在全球范围内可用的东西,所以我会使用容器将它注入到您需要的地方。 This method 有一个例子。
    • 很遗憾没有。我正在使用this library,它为每个控制器创建一个连接,所以我相信它们都有自己的socketId - 因此不能共享。
    • 实际上,如果您查看the source,您会看到它在pusher:main 下注册。所以你所要做的就是像他一样设置一个初始化器,然后调用application.inject('adapter', 'pusher', 'pusher:main')
    猜你喜欢
    • 2014-07-20
    • 1970-01-01
    • 2015-10-05
    • 2017-08-25
    • 2012-02-19
    • 1970-01-01
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多