suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Gestalten Sie die Oberflächenansicht des Komponenteneditors des Shopware Management CMS neu

<p>Beim Erstellen eines neuen CMS-Elements zur Verwendung im WYSIWYG-Editor haben wir drei Komponenten: eine mit dem Namen <code>component</code> und eine weitere mit dem Namen <code> ;code>previewComponent</code>. </p> Die <p><code>configComponent</code> wird offensichtlich verwendet, um die Konfiguration des Elements auszuwählen, während die <code>component</code>-Komponente verwendet wird, um die Ansicht im Editor zu aktualisieren. Zeigen Sie beispielsweise den im Konfigurationsabschnitt ausgewählten Inhalt an. Mein Problem ist, dass die Ansicht im Editor erst aktualisiert wird, nachdem der Benutzer auf die Schaltfläche „Speichern“ geklickt hat, was zu einer schlechten Benutzererfahrung führt – die Aktualisierung sollte in Echtzeit erfolgen. </p> <p><strong>Ich glaube, ich muss irgendwie ein Update-Ereignis <code>$emit</strong> aussenden, nachdem ich die Entitäts-ID aus <code>configComponent</code> ausgewählt habe ID der ausgewählten Entität zur <code>Komponente</code> </p> <p>Also, im Zweig von <code>component</code> habe ich den folgenden Code: </p> <pre class="brush:js;toolbar:false;"> <config-component @entity-picked="entityPickedHandler" /> </pre> <p>Nach meinem Verständnis der Dokumentation sollte dies aufgerufen werden, wenn das Ereignis <code>entity-picked</code> von <code>configComponent</code> ausgegeben wird ; „entityPickedHandler“-Methode. </p> <p>Dies ist beispielsweise der Ereignishandler in <code>component</code>: </p> <pre class="brush:js;toolbar:false;">methods: { entityPickedHandler(data) { console.log('Trigger-Ereignis:', Daten); } } </pre> <p>Dann geben Sie das Ereignis von <code>configComponent</code> aus: </p> <pre class="brush:js;toolbar:false;">berechnet: { myEntity: { erhalten() { return this.element.config.entity.value; }, set(Wert) { // this.$set(this.element.data, 'entityId', value); this.element.config.entity.value = Wert; console.log('Versuchen Sie, ein von der Entität ausgewähltes Ereignis auszugeben'); this.$emit('entity-picked', value); } } } </pre> <p>Offensichtlich funktioniert dies nicht, da <code>console.log()</code> im <code>entityPickedHandler</code> Das Ereignis hätte jedoch ausgegeben werden müssen. </p>
P粉797855790P粉797855790508 Tage vor667

Antworte allen(1)Ich werde antworten

  • P粉125450549

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

    Getter/Setter在作用域方面可能有些棘手。通常的做法看起来是正确的。也许可以尝试将实体存储在一个数据属性中,并在其上设置一个监听器。

    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;
        },
    },
    

    更新
    或者在component组件内部作为一个监听器:

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

    然后可以使用以下方式从configComponent更新数据:

    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);
            }
        }
    },
    

    然后,在configComponent的twig文件中,myentity方法用于sw-entity-single-selectv-model

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

    Antwort
    0
  • StornierenAntwort