#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
будет выполнен перехват маршрута.