recherche

Maison  >  Questions et réponses  >  le corps du texte

Refonte de la vue de l'interface de l'éditeur de composants CMS de gestion Shopware

<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>
P粉797855790P粉797855790471 Il y a quelques jours637

répondre à tous(1)je répondrai

  • P粉125450549

    P粉1254505492023-08-15 11:23:01

    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.

    data() {
        return {
            entity: this.element.config.entity.value,
        };
    },
    
    watch: {
        entity(value) {
            this.$emit('entity-picked', value);
        },
    },
    
    methods: {
        entityChanged(value) {
            this.element.config.entity.value = value;
            this.entity = value;
        },
    },
    

    Mise à jour
    Ou en tant qu'auditeur à l'intérieur du composant component :

    watch: {
        'element.data.entityId': {
            handler() {
                this.entityId = this.element.data.entityId;
            },
            deep: true,
        }
    }
    

    Les données peuvent ensuite être mises à jour depuis configComponent en utilisant :

    computed: {
        myentity: {
            get() {
                return this.element.config.myEntity.value;
            },
    
            set(value) {
                this.element.config.myentity.value = value;
                this.$set(this.element.data, 'entityId', value);
                this.$emit('element-update', this.element);
            }
        }
    },
    

    Ensuite, dans le fichier twig de configComponent的twig文件中,myentity方法用于sw-entity-single-selectv-model, la méthode myentity est utilisée dans le v-model de sw-entity-single-select :

    {% block sw_cms_element_team_box_config %}
        <sw-entity-single-select label="testing my entity" entity="myexample_entity" v-model="myentity" />
    {% endblock %}
    

    répondre
    0
  • Annulerrépondre