Refonte de la vue de l'interface de l'éditeur de composants CMS de gestion Shopware
P粉797855790
2023-08-14 12:07:32
<p>Lors de la création d'un nouvel élément CMS à utiliser dans l'éditeur WYSIWYG de Shopware, nous avons trois composants : un nommé <code>component</code> et un autre nommé <code> ;code>previewComponent</code>. </p>
Le composant <p><code>configComponent</code> permet évidemment de sélectionner la configuration de l'élément, tandis que le composant <code>component</code> Par exemple, affichez le contenu sélectionné dans la section de configuration. Mon problème est qu'il ne met à jour la vue dans l'éditeur qu'après que l'utilisateur a cliqué sur le bouton Enregistrer, ce qui conduit à une mauvaise expérience utilisateur - il doit être mis à jour en temps réel. </p>
<p><strong>Je pense que je dois d'une manière ou d'une autre <code>$emit</code>un événement de mise à jour</strong> après avoir sélectionné l'ID d'entité dans <code>configComponent</code>, puis transmettez le ID de l'entité sélectionnée pour le composant <code>component</code> </p>
<p>Donc, dans la brindille du <code>component</code>, j'ai le code suivant : </p>
<pre class="brush:js;toolbar:false;"> <config-component @entity-picked="entityPickedHandler" />
≪/pré>
<p>D'après ma compréhension de la documentation, cela doit être appelé lorsque l'événement <code>entity-picked</code> est émis depuis <code>configComponent</code> ; méthode "entityPickedHandler". </p>
<p>Par exemple, il s'agit du gestionnaire d'événements dans <code>component</code> : </p>
<pre class="brush:js;toolbar:false;">méthodes : {
entitéPickedHandler (données) {
console.log('Événement déclencheur :', données);
}
}
≪/pré>
<p>Ensuite, émettez l'événement depuis <code>configComponent</code> : </p>
<pre class="brush:js;toolbar:false;">calculé : {
monEntité : {
obtenir() {
renvoie this.element.config.entity.value ;
},
définir (valeur) {
// this.$set(this.element.data, 'entityId', valeur);
this.element.config.entity.value = valeur ;
console.log('Essayez d'émettre un événement sélectionné par une entité');
this.$emit('entity-picked', valeur);
}
}
}
≪/pré>
<p>Évidemment, cela ne fonctionne pas car <code>console.log()</code> dans le gestionnaire <code>entityPickedHandler</code> Cependant, l'événement aurait dû être émis. </p>
Getter/Setter peut être un peu délicat en matière de cadrage. L'approche habituelle semble être correcte. Essayez peut-être de stocker l'entité dans une propriété de données et d'y définir un écouteur.
Mise à jour
Ou en tant qu'auditeur à l'intérieur du composant
component
:Les données peuvent ensuite être mises à jour depuis
configComponent
en utilisant :Ensuite, dans le fichier twig de
configComponent
的twig文件中,myentity
方法用于sw-entity-single-select
的v-model
, la méthodemyentity
est utilisée dans lev-model
desw-entity-single-select
: