Правильный способ сделать 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();
    });
  }
});
Другие вопросы по тегам