J’ai add_model_callback(DiscourseSubscriptions::Customer, :after_save) do ... dans un plugin. La plupart des achats entraînent la création d’un « serveur » (un modèle personnalisé). Aujourd’hui, j’ai réussi à apprendre comment faire en sorte que d’autres endroits où un serveur est créé mènent à la page de configuration du nouveau serveur, avec quelque chose comme :
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}`);
}
Ce que j’aimerais faire maintenant, c’est que Discourse redirige de la même manière vers cette nouvelle page une fois la boîte de dialogue « merci pour votre achat » dismissée.
Peu m’importe que cela se produise dans Rails ou Ember, mais je suppose que cela doit se produire dans Ember ? Je ne comprends pas tout à fait (c’est-à-dire que je n’ai aucune idée, absolument aucune) comment détourner étendre le contrôleur/modèle/autre chose dans le plugin de souscription à partir de mon plugin.
Ce qui est très, très proche. Le problème maintenant est qu’il y a une condition de concurrence, car le add_model_callback(DiscourseSubscriptions::Customer, :after_save) do pourrait ne pas être terminé avant que je ne fasse ma requête ajax pour obtenir les serveurs.
Eh bien, c’est encore plus étrange. Même si j’ajoute un délai (en utilisant later) avant qu’il ne fasse l’appel ajax pour obtenir la nouvelle liste de serveurs, il obtient toujours une liste obsolète, pas celle après que le nouveau serveur ait été ajouté dans le callback. Je peux actualiser la fenêtre dans un autre onglet et voir qu’il obtient les bonnes données avant de faire l’appel ajax.
Je suppose que je vais abandonner pour l’instant. Dans le cas où le serveur existe avant l’achat (ce qui, je pense, est plus courant - vous configureriez tout et diriez ensuite, “oui, faisons-le”), cela fonctionne ; c’est juste le cas où ils disent “Oui, je veux payer pour une installation ; je paierai puis je verrai ce qui se passe.”