Come ottenere elementi DOM e modificare la funzionalità onClick

Ciao,

Hai qualche idea su come posso ottenere elementi DOM su discourse senza dover usare un setTimeout e un querySelector?
Perché attualmente faccio qualcosa di simile: -

setTimeout(() => {
    var createTopicButton = document.querySelector("#create-topic");
    if (createTopicButton)
        createTopicButton.onclick = function(e) {
            if (window.Moengage && window.Moengage.track_event) {
                window.Moengage.track_event("Topic_Create_Clicked", {});
            }
            setTimeout(() => {
                var topicCreate = document.querySelector("#reply-control .save-or-cancel .btn-primary")
                topicCreate.onclick = function(e) {
                    let heading = document.querySelector('#reply-control #reply-title').value;
                    let category = document.querySelector('.select-kit-header-wrapper> .select-kit-selected-name> .name> .badge-wrapper> .badge-category> .category-name')?.innerText;
                    let desc = document.querySelector('.d-editor-textarea-column> .d-editor-textarea-wrapper textarea').value;
                    let imagePresent = desc.includes("upload://");
                    if (window.Moengage && window.Moengage.track_event && heading && category && desc) {
                        window.Moengage.track_event("Topic_Created", {
                            "Category": category,
                            "Topic Name": heading,
                            "Topic Description": desc,
                            "Is_image_present": imagePresent
                        });
                    }

                }
            }, [300])

        };
}, [500])

Se non uso i timeout di cui sopra, a volte ottengo elementi nulli poiché il DOM non è stato caricato completamente, anche dopo averlo inserito in una funzione window.onload.
Quindi il mio obiettivo è ottenere elementi DOM e modificare la funzionalità onChange.

Qualsiasi aiuto in questo sarebbe fantastico.

Grazie :slight_smile:

Discourse è un’applicazione EmberJS completa, quindi non è possibile interrogare/manipolare elementi come se fosse un sito web HTML semplice renderizzato dal server.

Per personalizzare l’applicazione web è possibile seguire le linee guida su
Guida per sviluppatori ai temi di Discourse

Oltre a consultare la guida per sviluppatori, potresti fare un passo indietro e descrivere cosa stai cercando di fare, piuttosto che la tua soluzione suggerita.

Ciao Jay,

Stavo cercando di chiamare le funzioni analitiche di moEngage al clic di determinati pulsanti sulla pagina (ad esempio: mi piace, commenta, condividi).

Posso farlo solo se ho accesso alla funzionalità onClick di questi pulsanti. Esiste un plugin all’interno di Discourse che mi aiuterebbe a raggiungere questo obiettivo?

Grazie

Dovresti essere in grado di farlo in un componente del tema. Ti consiglio di iniziare con le guide per sviluppatori per vedere come funzionano le cose.