Penso di aver fatto funzionare questa cosa. Obiettivo: caricare determinati argomenti in un punto specifico di un nuovo modello (probabilmente funziona anche per l’aggiunta a modelli esistenti, ma non l’ho testato):
- Inserisci il tuo outlet plugin inventato nel tuo modello (il mio outlet plugin inventato si chiama “great-topics”, ad esempio):
{{plugin-outlet name="great-topics"}}
- Aggiungi il codice Handlebars (ovvero il tuo componente) in un connettore:
[your-plugin]/assets/javascripts/discourse/connectors/great-topics/new-component.hbs
<div>Sono nell'outlet plugin! Carica gli argomenti:</div>
{{topic-list topics=featuredTopics showPosters=true}}
- Aggiungi il codice JavaScript per il componente che si trova nel tuo nuovo connettore:
[your-plugin]/assets/javascripts/discourse/connectors/great-topics/new-component.js.es6
[questo codice è adattato dal seguente post su Meta che contiene codice per caricare argomenti con il tag “featured”: https://meta.discourse.org/t/how-to-add-a-featured-topic-list-to-your-discourse-homepage/132949]
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 = [];
// Crea un array vuoto, vi spingeremo gli argomenti
var featuredUsers = result.users;
// Ottieni gli utenti rilevanti
result.topic_list.topics.slice(0, 4).forEach(function (topic) {
// Stiamo estraendo gli argomenti partendo da 0 fino a 4
// Questo significa che ne mostreremo 3 in totale. Aumenta 4 per mostrarne di più.
topic.posters.forEach(function (poster) {
poster.user = $.grep(featuredUsers, function (e) { return e.id == poster.user_id; })[0];
});
// Associa gli utenti al nostro argomento
featuredTopics.push(Topic.create(topic));
// Aggiungi i nostri argomenti all'array featuredTopics
});
}) // fine result.topic.topic_list...
component.set('featuredTopics', featuredTopics); // qui gli argomenti vengono aggiunti al componente
component.set("loadingTopics", false); //il mio codice sopra non ha un caricatore. ma questo è presente se vuoi un caricatore. Devi aggiungerlo al file hbs per quello. Vedi il post collegato su Meta sopra
}); // fine ajax
}// fine setup component
Per me funziona, almeno per caricare argomenti con il tag “featured” nell’outlet plugin del mio nuovo modello.
Per vedere questo in funzione, sarà necessario riavviare il server.