J’ai également besoin de cette fonctionnalité. Pour l’instant, je procède comme suit, mais cela prend beaucoup trop de temps.
const selectedTopics = this.selectedTopics
// Consomme les IDs de sujets et renvoie les vrais sujets
this.selectedTopicsID.forEach(function(tid,index){
Topic.find(tid,{}).then(results => {
selectedTopics.pushObject(results)
})
});
Je suis sur le point de réouvrir le listcontroller dans mon plugin.rb pour ajouter un nouveau point de terminaison (endpoint), et de réouvrir topic-list dans l’initialiseur du frontend pour faire quelque chose de similaire à ceci :
https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/models/topic-list.js.es6#L129
Mais il doit bien y avoir un moyen plus simple de faire cela. N’existe-t-il vraiment aucun point de terminaison pour récupérer plusieurs sujets par ID en une seule fois ?
Je serais très reconnaissant pour de l’aide ![]()
EDIT : Voici comment j’ai résolu ce problème pour moi :
Voici comment cela peut être utilisé.
import TopicList from 'discourse/models/topic-list';
const selectedTopics = this.selectedTopics
// Consomme les IDs de sujets
TopicList.topics_array(this.selectedTopicsID).then(results => selectedTopics.pushObjects(results.topic_list.topics))
Pour l’instant, cela présente toujours l’inconvénient de ne pas renvoyer de vrais objets Topic, mais je suppose qu’ajouter une ligne comme celle-ci résoudra le problème :
Je suis toujours incertain de savoir si c’est la bonne méthode et/ou si cela compromet la sécurité.
Une autre chose qui pourrait être faite : vérifier d’abord dans le magasin (store) si l’enregistrement existe déjà, puis ne charger que ce qui manque, en utilisant fromMap. Similaire à :
Bref, cela devient trop verbeux ici ![]()
Voici ma solution finale, je vais m’arrêter là pour aujourd’hui :