我开始研究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万岁:)
答案 0 :(得分:4)
第一个选项:您可以使用ember-data
。它具有自定义设置,例如serializers或adapters。
第二个选项:您可以使用ember-ajax
之类的插件。
我们的用法就是使用jQuery' ajax()
。我们编写了一个只包装jquery.ajax()
的服务,并在我们的代码中随处使用它。我们相信它为我们提供了编写不同类型查询的灵活性。我们没有model
ember-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
。
答案 1 :(得分:3)
如果您正在对模型执行CRUD操作,那么ember-data很不错。在大多数应用中,CRUD操作占请求的约90%。
在某些情况下,应用需要发出不太适合余烬数据的请求,这就是ember-ajax
进入游戏的地方。它允许你像jQuery那样做请求,还有一个很好的补充,即请求是通过一个服务来完成的,这个服务有一些扩展点,可以自定义像app一样使用的标题,这个更复杂只是原始的jquery。
如果你的应用程序要在fastboot中运行,你应该使用ember-network
,因为它在浏览器和节点中都有效,而jquery / ember-ajax却没有。
答案 2 :(得分:0)
当前的最佳实践是ember-fetch。因为ember-network被ember-fetch弃用了。
您只需运行以下命令即可安装ember-fetch插件,
ember install ember-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();
});
}
});