Как в init выполнить POST-вызов на основе разрешения модели

#ember.js

#ember.js

Вопрос:

я новичок в ember и нуждаюсь в вашей помощи.

В приложении / маршруте.js Мне нужно выполнить POST-вызов на основе ответа, который получает модель. Что-то вроде этого в route.js:

 export default Route.extend({
  ajax: inject.service(),
  details: inject.service(),

  model() {
      return this.get('details').fetchAccount();
  },
  

итак, как только модель будет разрешена при инициализации, мне нужно будет выполнить вызов. Модель имеет статус, который запускает вызов, если он имеет значение true.

 init() {
    if (model.user) {
       ...
    }
}
  

Есть мысли, как этого добиться?

Ответ №1:

Если this.get('details').fetchAccount() не возвращается обещание, вы можете попробовать использовать setupController перехват.

 setupController(controller,model){
 this._super(...arguments);
 if (model.user) {
       ...
    }
}
  

Все зависит от того, что вы собираетесь делать после разрешения модели, собираетесь ли вы устанавливать какие-либо свойства для контроллера, тогда вы можете использовать перехват setupController.

Комментарии:

1. Нет настройки на контроллере. После того, как он будет разрешен, мне нужно запустить, если это правда, выполнить POST-вызов.

2. Вы можете попробовать запустить POST-вызов в if блоке.

Ответ №2:

Вы можете указать model методу, что делать, когда обещание fetchAccount метода будет выполнено:

 model() {
  let fetchedAccount = this.get('details').fetchAccount();

  fetchedAccount.then(account => {
    doTheThingWith(account); // Obviously, your own code here
  });

  return fetchedAccount;
}
  

Комментарии:

1. Спасибо, Крис! Позвольте мне попробовать это.

2. Привет, Крис, я получаю сообщение об ошибке. Ошибка типа: ‘вызывающий’ и ‘аргументы’ являются свойствами функции с ограниченным доступом и к ним нельзя получить доступ в этом контексте. Я пытался это сделать. Извлеченный счет. затем (учетная запись => { console.log(учетная запись); });

3. Я не уверен, что смогу вам помочь, но вы можете рассмотреть возможность обновления вашего вопроса с помощью кода из fetchAccount() , чтобы кто-то другой мог вам помочь. Мой основной опыт связан с использованием данных Ember, а не с развертыванием моей собственной структуры Promise.

4. Справедливо! Спасибо, Крис!

Ответ №3:

Вы можете использовать afterModel привязку маршрута.

Комментарии:

1. Я не использую ember-data. Я не уверен, что это сработает, но спасибо за комментарий.

2. Вы можете использовать его, даже если вы не используете ember-data. Мы также не используем ember-data 🙂 Если fetchAccount() возвращает обещание, после разрешения обещания afterModel будет выполнен перехват маршрута.