2015-02-24 117 views
2

我的模型通过Ember默认的RESTAdapter与服务器协同工作。使用RESTAdapter自定义后请求

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

如何让Ember发送那个自定义的post-request?没有Ember.ajax可能吗?

回答

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')); 
     } 
    } 
}); 
+0

得到任何建议/上'Ember.run'链接? Docs相当简化http://emberjs.com/api/classes/Ember.run.html – hectorh30 2016-02-02 05:51:53

+1

@ hectorh30对于API,请查看[源代码](https://github.com/ebryn/backburner.js/斑点/主/ LIB/backburner.js#L141)。参数是'(目标,方法,参数...)'。要了解运行循环,请查看[本指南](https://github.com/ebryn/backburner.js/blob/master/lib/backburner.js#L141)。 – GJK 2016-02-02 14:43:43

+0

第二个链接也指向代码。指南将非常有用。非常感谢! – hectorh30 2016-02-02 15:34:42