Правильный способ сделать AJAX GET и POST вызовы в EmberJS
Я начал работать над EmberJS, и мне это очень нравится. У него есть кривая обучения, но я верю, что у него есть фундаментально очень значимые принципы.
Мои вопросы, как сделать вызовы GET и POST в Ember JS. Я понимаю, что есть модели / магазин, но модели (по моему мнению) будут относиться только к атрибутам конкретной сущности.
Любые мысли по следующим вопросам будут великолепны.
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 до стиля обещаний.
Любые мысли будут высоко ценится.
Да здравствует EmberJS:)
3 ответа
Первый вариант: вы можете использовать ember-data
, Он имеет настройки, такие как сериализаторы или адаптеры.
Второй вариант: вы можете использовать такие дополнения, как 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
,
Если вы выполняете операции CRUD над моделями, ember-data - это хорошо. В большинстве приложений операции CRUD составляют около 90% запросов.
Есть случаи, когда приложение должно отправлять запросы, которые не идеальны для ember-данных, и именно здесь ember-ajax
входит в игру. Он позволяет вам делать запросы, как если бы вы работали только с jQuery, с приятным дополнением, что запросы выполняются через службу, имеющую некоторые точки расширения, позволяющие настраивать такие вещи, как заголовки, которые используются во всем приложении, что более сложно с просто сырой jquery.
Если ваше приложение будет работать в fastboot, вы должны использовать ember-network
потому что он работает как в браузере, так и в узле, а jquery/ember-ajax - нет.
В настоящее время лучшая практика будет угасать. поскольку 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();
});
}
});