También necesito esta funcionalidad. Ahora mismo lo estoy haciendo así, pero esto lleva demasiado tiempo.
const selectedTopics = this.selectedTopics
//consume los temas como IDs y devuelve los temas reales
this.selectedTopicsID.forEach(function(tid,index){
Topic.find(tid,{}).then(results => {
selectedTopics.pushObject(results)
})
});
Estoy a punto de volver a abrir el listcontroller en mi plugin.rb y añadir un nuevo endpoint, y volver a abrir la topic-list en el inicializador del frontend para hacer algo similar a esto:
https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/models/topic-list.js.es6#L129
Pero debe haber una forma más fácil de hacer esto. ¿Realmente no hay ningún endpoint para obtener temas en masa por ID?
Estaría muy agradecido por alguna ayuda ![]()
EDITO: Así es como resolví este problema para mí:
Así es como se puede usar.
import TopicList from 'discourse/models/topic-list';
const selectedTopics = this.selectedTopics
//consume los temas como IDs
TopicList.topics_array(this.selectedTopicsID).then(results => selectedTopics.pushObjects(results.topic_list.topics))
Ahora mismo esto todavía tiene la desventaja de que no devuelve objetos “reales” de Topic, pero supongo que añadir una línea como esta lo solucionará:
Aún no estoy seguro de si esta es la forma correcta de hacerlo y/o si esto rompe la seguridad.
Otra cosa que se podría hacer: primero buscar en la tienda si el registro ya está allí y luego cargar solo lo que no está, con fromMap. Similar a:
De todos modos, esto se está volviendo demasiado verbose aquí ![]()
Esta es mi solución final, daré por terminado el día ahora: