В плагине у меня есть add_model_callback(DiscourseSubscriptions::Customer, :after_save) do .... Большинство покупок приводит к созданию «сервера» (пользовательская модель). Сегодня я узнал, как сделать так, чтобы в других местах, где создаётся сервер, переход на страницу настройки нового сервера происходил примерно так:
Server.createServer(server).then((result) => {
if (result.server) {
this.get("servers").pushObject(EmberObject.create(result.server));
const id = result.server.id;
window.location = getURL(`/pfaffmanager/servers/${id}`);
}
Теперь я хотел бы сделать так, чтобы Discourse аналогично перенаправлял на эту новую страницу после того, как диалоговое окно «Спасибо за покупку» будет закрыто.
Мне не важно, произойдёт ли это в Rails или в Ember, но, полагаю, это должно происходить в Ember? Я не до конца понимаю (то есть у меня вообще нет ни малейшего представления), как захватить расширить контроллер/модель/что угодно в плагине subscriptions из своего плагина.
Это уже очень-очень близко. Проблема теперь в том, что возникает состояние гонки, так как add_model_callback(DiscourseSubscriptions::Customer, :after_save) do может не завершиться до того, как я выполню свой AJAX-запрос для получения списка серверов.
На самом деле, всё ещё страннее. Даже если я добавлю задержку (используя later) перед AJAX-запросом для получения нового списка серверов, всё равно возвращается устаревший список, а не тот, который должен быть после добавления нового сервера в обратном вызове. Я могу обновить окно в другой вкладке и увидеть, что там данные верные ещё до выполнения AJAX-запроса.
Думаю, пока я сдамся. Для случая, когда сервер существует до покупки (что, я думаю, более распространено — вы всё настроите, а потом скажете: «Да, давайте сделаем это»), всё работает; проблема только в случае, когда пользователь говорит: «Да, я хочу оплатить установку; я заплачу, а потом посмотрю, что получится».