使用RESTAdapter自定义发布请求

时间:2015-02-24 20:12:58

标签: ember.js ember-data ember-cli

我的模型通过Ember的默认RESTAdapter与服务器配合使用。

我刚刚在我的服务器上创建了一个自定义端点/mail,如果提供了名称,有效的电子邮件地址和文本,则会发送一封电子邮件。

如何让Ember发送自定义的后期请求?是否有可能没有Ember.ajax?

1 个答案:

答案 0 :(得分:6)

就我个人而言,我不会使用Ember-Data来处理这种情况;我通常只使用Ember-Data来处理我的持久模型。如果你试图将Ember-Data用于其他AJAX调用,它就会变得一团糟。请记住,Ember-Data的工作是管理您的持久数据,以及可以执行AJAX调用的方式。这并不意味着任何需要AJAX调用的事都应该用Ember-Data来处理。

我有同样的问题,我写了一个实用程序模块,它具有我所有非模型AJAX的功能。这使得交换测试变得非常容易。这是一个小例子:

// utils/ajax.js

export function sendHelpEmail(comment) {
    return new Promise((resolve, reject) => {
        $.ajax({
            type: 'POST',
            url: '/api/contact_us',
            contentType: 'application/json',
            data: JSON.stringify({ comment }),
            processData: false,
            statusCode: {
                200: () => Em.run(null, resolve),
                500: () => Em.run(null, reject)
            }
        });
    });
}

然后,我可以在我的控制器中做这样的事情:

import { sendHelpEmail} from '../utils/ajax.js';

export default Em.Controller.extend({
    actions: {
        sendEmail() {
            sendHelpEmail(this.get('comment'));
        }
    }
});