Questo è inaspettato, soprattutto perchĂŠ non sto effettivamente âcambiando nullaâ (ancora)?
Sono in grado di riprodurre questo problema anche se questa è lâunica modifica.
In definitiva, il motivo per cui sto cercando di cambiare questo è per poter forzare una rivalutazione di questo template anche se non mi sto spostando dentro o fuori da un percorso di argomento.
In definitiva, voglio aggiungere una logica in modo che il widget sia forzato a essere aggiornato quando ci si sposta dentro e fuori dai percorsi delle categorie, poichĂŠ la presentazione del mio percorso di categoria deve essere diversa.
Quindi, una soluzione a questo potrebbe essere un altro modo per forzare lâaggiornamento dei contenuti dellâintestazione.
In ogni caso, questo non sembra comportarsi come dovrei aspettarmi?
Non vogliamo investire molto tempo qui: i widget non dureranno ancora a lungo. Che personalizzazione stai cercando di apportare? Possiamo aiutarti aggiungendo unâuscita per plugin da qualche parte (ora siamo in grado di aggiungere normali uscite per plugin allâinterno del codice dei widget).
Puoi condividere di piĂš del tuo file (ad esempio, da dove viene importato hbs)?
Funzionalmente, sto cercando di scambiare il logo a seconda del percorso. In realtĂ , lo sto facendo allegando unâimmagine al logo della home in alcuni percorsi e sovrapponendo il logo principale. Voglio che quella logica venga rivalutata quando ci si sposta tra i percorsi, il che attualmente sembra funzionare entrando e uscendo dai percorsi di Topic, immagino perchĂŠ il widget header-contents a cui tutto è collegato ha una logica che valuta gli attrs.topic che ovviamente cambia quando ciò accade.
Il mio category-logo-widget è collegato in questo modo:
Il che funziona bene, ma non viene rivalutato tra alcune transizioni di percorso, quindi non soddisfa il requisito di essere completamente dinamico senza un ricaricamento della pagina.
ooooops, questo potrebbe essere il problema, avevo la sensazione che potesse essere cosĂŹ ma i miei test erano ovviamente troppo superficiali per escluderlo.
Questo è probabilmente il problema. I widget âtemplatesâ sono una cosa personalizzata di Discourse e vengono compilati in modo completamente diverso dagli Ember templates. Dovrai importare hbs in questo modo:
Sembra che abbiamo un evento dellâapp site-header:force-refresh che potresti attivare in risposta a qualche altro evento dellâapp o evento del router Ember:
Fantastico, grazie David, correggerò lâinstallazione obsoleta e proverò anche i tuoi consigli qui. Accumulo multiplo, grazie per aver aiutato a fare chiarezza!
btw, solo come nota a margine, mentre lâAPI dei widget è molto personalizzata e un poâ complicata (specialmente le cose hyperscript), devo ammettere che è estremamente potente per aggiungere nuovi comportamenti ai widget esistenti senza dover sovrascrivere molto codice.
ad esempio, ho usato molto questo schema:
api.reopenWidget('discourse-awesome-widget', {
html(attrs, state) {
let contents = this._super(...arguments);
contents.unshift(h("div.my-cool-new-thing", "cool new thing"))
return contents;
}
});
this._super potrebbe essere molto codice!!!
E può diventare molto piÚ intelligente di cosÏ, tanto che ho imparato ad apprezzarlo molto.
Spero che lââoverride-abilityâ di qualunque cosa lo sostituirĂ sarĂ ugualmente flessibile e potente.
La soluzione principale qui saranno gli hook per plugin. Come sempre, se senti di averne bisogno di uno che non esiste, sentiti libero di inviare una PR al core