在EmberJS中进行AJAX GET和POST调用的正确方法

我已经开始研究EmberJS,我非常喜欢它。 它确实有学习曲线,但我相信它具有基本上非常有意义的原则。

我的问题是如何在Ember JS中进行GET和POST调用。 我知道有模型/商店,但模型(在我看来)只对特定实体的属性。

对以下问题的任何想法都会很棒。

1. USER A send friend request to USER B. Should there be a "Request" model? And do I just make a POST request? 2. Some arbitrary data needs to be returned for the page. Not particularly of a model. Should I still make a model for that? For use a simple GET request? 3. User needs to update this profile photo. How can the file to be uploaded, be set as a model attribute? 

我该如何进行常规的GET和POST调用(如果我要完成它们的话)。 只是使用jQuery的$ .ajax()或者是另一种方式。 我还发现了一个服务ember-ajax ,它将$ .ajax扩展为promises样式。

任何想法将不胜感激。

EmberJS万岁:)

第一个选项:您可以使用ember-data 。 它具有自定义程序,如序列化程序或适配器 。

第二个选项:你可以使用像ember-ajax这样的插件。

我们的用法就是使用jQuery的ajax() 。 我们编写了一个只包装jquery.ajax()的服务,并在代码中的任何地方使用它。 我们相信它为我们提供了编写不同类型查询的灵活性。 我们没有任何modelember-data

示例 – 代码:

  export default Ember.Service.extend({ doPostCall(target, data, options=null){ //consider cloning options with Ember.$.extend var requestOptions= options || {}; requestOptions.url=target; requestOptions.type='POST'; requestOptions.data=JSON.stringify(data); doRemoteCall(requestOptions); }, doGetCall(target, data=null, options=null){ //consider cloning options with Ember.$.extend var requestOptions=options || {}; requestOptions.url=target; requestOptions.type='GET'; requestOptions.data=data; doRemoteCall(requestOptions); }, doRemoteCall(requestOptions){ //assign default values in here: // such as contentType, dataType, withCredentials... Ember.$.ajax(requestOptions) .then(function(data) { Ember.run(null, resolve, data); }, function(jqXHR , textStatus, errorThrown) { jqXHR.then = null; Ember.run(null, reject, jqXHR, textStatus, errorThrown); }); } }); 

PS:顺便说一句,如果你需要在服务器端运行你的应用程序(使用fastboot),你就不能使用jQuery。 所以使用ember-network

如果您正在对模型执行CRUD操作,那么ember-data很不错。 在大多数应用程序中,CRUD操作占请求的约90%。

在某些情况下,应用程序需要发出不太适合余烬数据的请求,这就是ember-ajax进入游戏的地方。 它允许你像jQuery一样做请求,还有一个很好的补充,即请求是通过一个服务来完成的,该服务有一些扩展点,允许自定义诸如app范围内使用的标题之类的东西,这对于只是原始的jquery。

如果你的应用程序将在fastboot中运行,你应该使用ember-network ,因为它既可以在浏览器中运行,也可以在节点中运行,而jquery / ember-ajax则不然。

当前的最佳实践是ember-fetch。 因为不推荐使用ember-network而使用ember-fetch 。

您可以通过运行以下命令来安装ember-fetch插件,

 ember install ember-fetch 

然后只需导入fetch,你就可以使用fetch方法了。

 import fetch from 'fetch'; import Ember from 'ember'; export default Ember.Route.extend({ model() { return fetch('/my-cool-end-point.json').then(function(response) { return response.json(); }); } });