Si no, parece que este método solo funciona al vincularse a una clase conectora (es decir, con un plugin outlet). ¿Hay pasos especiales que deba seguir para agregar un nuevo plugin outlet a una plantilla?
Creo que he logrado que esto funcione. Objetivo: cargar ciertos temas en un punto específico de una nueva plantilla (probablemente también funcione para agregar a plantillas existentes, pero no lo he probado):
Inserta tu outlet de plugin inventado en tu plantilla (mi outlet de plugin inventado se llama “great-topics”, así):
{{plugin-outlet name="great-topics"}}
Añade el código Handlebars (es decir, tu componente) en un conector:
const ajax = require('discourse/lib/ajax').ajax;
const Topic = require('discourse/models/topic').default;
setupComponent(args, component) {
ajax("/tag/featured.json").then(function (result) {
let featuredTopics = [];
// Crear un array vacío, añadiremos los temas a él
var featuredUsers = result.users;
// Obtener los usuarios relevantes
result.topic_list.topics.slice(0, 4).forEach(function (topic) {
// Estamos extrayendo los temas desde el 0 hasta el 4
// Esto significa que mostraremos 3 en total. Aumenta 4 para ver más.
topic.posters.forEach(function (poster) {
poster.user = $.grep(featuredUsers, function (e) { return e.id == poster.user_id; })[0];
});
// Asociar usuarios con nuestro tema
featuredTopics.push(Topic.create(topic));
// Añadir nuestros temas al array featuredTopics
});
}) // fin result.topic.topic_list...
component.set('featuredTopics', featuredTopics); // aquí es donde se añaden los temas al componente
component.set("loadingTopics", false); // mi código anterior no tiene un indicador de carga. pero esto está aquí si quieres uno. Debes añadirlo también al archivo hbs. Ver el post en Meta enlazado arriba
}); // fin ajax
}// fin setup component
Esto funciona para mí, al menos, para cargar temas con la etiqueta “featured” en el outlet del plugin de mi nueva plantilla.
Para ver esto funcionando, tendrás que reiniciar el servidor.