Je ne vois peut-être pas quelque chose d’évident ici, je m’excuse donc par avance si c’est le cas.
Mon plugin a un paramètre personnalisé pour chaque catégorie, qui est utilisé pour afficher/masquer un interrupteur dans le compositeur. L’interrupteur est configuré dans un composant glimmer, qui est appelé par un initialiseur pour être rendu dans la sortie du plugin composer-fields.
Mon objectif est que le compositeur affiche/masque l’interrupteur chaque fois que la catégorie est modifiée dans le compositeur, en fonction de la valeur du paramètre personnalisé lié à cette catégorie.
Est-il possible d’ajouter un observateur sur les outletArgs d’une sortie de plugin ? Le modèle du compositeur est défini dans les outletArgs, donc j’ai pensé à définir l’observateur sur le categoryId à travers cela. Ensuite, j’exécuterais une fonction pour vérifier la valeur du paramètre personnalisé dans la catégorie. Mais j’ai des difficultés à configurer l’observateur. Il se peut que je le configure incorrectement, je suis quelque peu nouveau dans EmberJS.
Ou existe-t-il une autre façon d’y parvenir ?
Pour contexte, j’utilise actuellement Discourse v3.4.7.
Je pense que GitHub - discourse/discourse-custom-composer-placeholders peut servir d’exemple pour montrer comment faire cela.
Il modifie le placeholder dans le compositeur en fonction de la catégorie et fonctionne également lorsque vous le modifiez.
J’ai essayé cette solution, mais malheureusement, il semble que la version sur laquelle je travaille ait une liste plus ancienne de transformateurs initialisés, qui ne contient pas composer-editor-reply-placeholder.
Pour plus de contexte, je suis en train de refactoriser les fonctionnalités du plugin pour utiliser des composants Glimmer après la dépréciation de l’API registerConnectorClass. Le code ci-dessous est ce qui a été mis en place à l’origine.
export default {
initialize(container) {
withPluginApi("1.6.0", api => {
api.registerConnectorClass("composer-fields", "handlebars-template-name", {
setupComponent(attrs, component) {
const model = attrs.model;
const controller = api.container.lookup("controller:composer");
if (controller) {
controller.addObserver("model.categoryId", this, function () {
// logique pour définir les valeurs de showToggle et isRestricted
let props = {
showField: showToggle && isRestricted,
}
component.setProperties(Object.assign(props));
})
}
}
}
Existe-t-il un autre moyen d’obtenir la même fonctionnalité à partir d’un composant Glimmer ? Notamment observer les changements sur le modèle et/ou categoryId.