A cui mi collego sul mio sito, per portare gli utenti al forum a fare una domanda. Uso vari valori per title per precompilare il titolo con l’argomento di cui si stanno chiedendo, e vorrei che l’editor fosse il focus.
Stavo cercando di capire come modificarlo e ho trovato il file composer.js con la definizione di focusTarget, che sarebbe abbastanza facile da modificare per supportare questo comportamento se il titolo venisse passato.
Il problema che sto riscontrando è che non riesco a vedere dove viene effettivamente chiamato focusTarget. Programmo da molti anni, ma sono nuovo a Ember e ho fatto relativamente poca programmazione JavaScript.
Qualsiasi suggerimento su come affrontare questo problema sarebbe molto apprezzato (anche un rtfm con un puntatore a un manuale ragionevole sarebbe apprezzato)
Bene, quel codice è quello che lo fa funzionare. Quello che non mi è chiaro è quale codice devo modificare affinché questo metodo ottenga il titolo, in modo da poter impostare correttamente il focus sull’editor lì…
Sto quasi riuscendo a farlo funzionare: quando il codice è in esecuzione, ricevo un errore che dice che scheduleOnce non è definito. Ho provato api.scheduleOnce, ma sembra che scheduleOnce sia una cosa di Ember. Ho provato ad aggiungere questo import al mio componente, ma ho ricevuto un errore che dice che gli import sono consentiti solo al livello superiore. import { scheduleOnce } from "@ember/runloop";
Immagino ci sia qualcosa di piccolo che mi sfugge e continuerò a lavorarci, ma ho pensato di vedere se ti sembrava ovvio.
In quale file dovrei metterli? Quello che stavo cercando di fare era semplicemente usarlo in <head> – come componente – questo è quello che ho fatto, il che si traduce nel log “scheduling afterRender” che appare, poi un errore riguardo a scheduleOnce che non esiste. Ho provato a usare l’import in alcuni modi, ma non funziona. Sospetto che la mia inesperienza con i moduli in javascript mi stia causando problemi. Forse non posso farlo tramite un componente e ho bisogno di fare un plugin più completo. Ci darò un’occhiata – grazie ancora per il tuo aiuto
<script type="text/discourse-plugin" version="1.8.0">
api.onAppEvent("composer:open", ({ model }) => {
console.log("composer open happened, model is: ", model);
if (model.title !== "") {
console.log("scheduling afterRender");
scheduleOnce("afterRender", () => {
console.log("after render happening");
api.putCursorAtEnd(document.querySelector("textarea.d-editor-input"));
});
}
});
</script>
A parte questo, ti incoraggio vivamente a utilizzare la Theme CLI. Puoi creare un componente tema da un modello, sincronizzarlo con un Discourse con aggiornamento in tempo reale e aggiornare eventuali modifiche utilizzando il tuo editor. È molto più facile che usare l’interfaccia utente!
Grazie ancora Arkshine, ho creato il mio primo componente usando discourse_theme ora
Per chiunque trovi questa discussione, ho semplicemente dovuto eseguire alcuni comandi:
gem install discourse_theme
npm install -g yarn
discourse_theme new <component-name>
poi modifica il file: javascripts/discourse/api-initializers/.js
caricalo su github, e puoi installarlo / condividerlo.
Il mio è qui.
Sembra avere una funzione in cui puoi aggiornare automaticamente la versione sul tuo server, mentre modifichi i file. Sembra buono e utile man mano che mi addentro in componenti più complessi.