C’est inattendu, d’autant plus que je ne suis pas en train de « changer quoi que ce soit » (pour l’instant) ?
Je suis capable de reproduire ce problème même si c’est la seule modification.
En fin de compte, la raison pour laquelle j’essaie de changer cela est de forcer une réévaluation de ce modèle même si je ne navigue pas dans ou hors d’une route de sujet.
En fin de compte, je veux ajouter une logique pour forcer le rafraîchissement du widget lors de la navigation dans et hors des routes de catégorie, car ma présentation de route de catégorie doit être différente.
Donc, une solution à cela pourrait être une autre façon de forcer le rafraîchissement du contenu de l’en-tête.
Dans tous les cas, cela ne semble pas se comporter comme je m’y attendrais ?
Nous ne voulons pas vraiment investir beaucoup de temps ici - les widgets ne seront plus là très longtemps. Quelle personnalisation essayez-vous de faire ? Pouvons-nous vous aider en ajoutant une sortie de plugin quelque part (nous avons la possibilité d’ajouter des sorties de plugin normales dans le code des widgets maintenant).
Pouvez-vous partager davantage de votre fichier (par exemple, d’où est importé hbs ?)
Fonctionnellement, j’essaie d’échanger le logo en fonction de la route. En réalité, je le fais en attachant une image au logo d’accueil sur certaines routes et en superposant le logo principal. Je veux que cette logique soit réévaluée lors du passage d’une route à l’autre, ce qui semble actuellement fonctionner lors de l’entrée et de la sortie des routes de sujet, je suppose parce que le widget header-contents auquel tout est attaché a une logique qui évalue les attrs.topic qui change évidemment lorsque cela se produit.
Ce qui fonctionne bien, mais n’est pas réévalué entre certaines transitions de route, ne répond donc pas entièrement à l’exigence de manière dynamique sans rechargement de page.
Oups, cela pourrait être le problème, j’avais le sentiment que c’était le cas, mais mes tests étaient évidemment trop superficiels pour l’exclure.
C’est probablement le problème. Les widgets ‘templates’ sont une chose personnalisée de Discourse, et sont compilés d’une manière totalement différente des templates Ember. Vous devrez importer hbs comme ceci :
Il semble que nous ayons un événement d’application site-header:force-refresh que vous pourriez déclencher en réponse à un autre événement d’application ou à un événement de routeur Ember :
Au fait, juste pour information, bien que l’API des widgets soit très personnalisée et quelque peu délicate (surtout le code hyperscript), je dois admettre qu’elle est extrêmement puissante pour attacher de nouveaux comportements à des widgets existants sans avoir à remplacer beaucoup de code.
Par exemple, j’ai beaucoup utilisé ce modèle :
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 pourrait représenter beaucoup de code !!!
Et cela peut devenir beaucoup plus intelligent que cela, au point que j’en suis venu à l’apprécier vraiment.
J’espère que l’“override-ability” de ce qui le remplacera sera tout aussi flexible et puissant.
La solution principale ici sera les points de sortie des plugins. Comme toujours, si vous estimez en avoir besoin d’un qui n’existe pas, n’hésitez pas à soumettre une PR au cœur