Reka bentuk semula paparan antara muka editor komponen CMS pengurusan Shopware
P粉797855790
P粉797855790 2023-08-14 12:07:32
0
1
630
<p>Dalam mencipta elemen CMS baharu untuk digunakan dalam editor WYSIWYG Shopware, kami mempunyai tiga komponen: satu bernama <code>component</code> dan satu lagi bernama <code> configComponent</code>, dan satu lagi bernama < ;code>previewComponent</code>. </p> <p><code>configComponent</code> jelas digunakan untuk memilih konfigurasi elemen, manakala komponen <code>component</code> Sebagai contoh, paparkan kandungan yang dipilih dalam bahagian konfigurasi. Masalah saya ialah ia hanya mengemas kini paparan dalam editor selepas pengguna mengklik butang simpan, yang membawa kepada pengalaman pengguna yang buruk - ia harus dikemas kini dalam masa nyata. </p> <p><strong>Saya rasa saya perlu entah bagaimana <kod>$emit</code>acara kemas kini</strong> selepas memilih id entiti daripada <code>configComponent</code>, Kemudian lulus ID entiti yang dipilih kepada komponen <kod>komponen</kod> </p> <p>Jadi, dalam ranting <kod>komponen</kod>, saya mempunyai kod berikut: </p> <pre class="brush:js;toolbar:false;"> <config-component @entity-picked="entityPickedHandler" /> </pra> <p>Dari pemahaman saya tentang dokumentasi, ini harus dipanggil apabila acara <code>entiti dipilih</code> dipancarkan daripada <code>configComponent</code> ; kaedah "entityPickedHandler". </p> <p>Sebagai contoh, ini ialah pengendali acara dalam <kod>komponen</kod>: </p> <pre class="brush:js;toolbar:false;">kaedah: { entityPickedHandler(data) { console.log('Peristiwa pencetus:', data); } } </pra> <p>Kemudian, keluarkan acara daripada <code>configComponent</code>: </p> <pre class="brush:js;toolbar:false;">dikira: { myEntity: { dapatkan() { kembalikan this.element.config.entity.value; }, set(nilai) { // this.$set(this.element.data, 'entityId', value); this.element.config.entity.value = nilai; console.log('Cuba untuk memancarkan acara yang dipilih entiti'); this.$emit('entity-picked', value); } } } </pra> <p>Jelas sekali, ini tidak berfungsi kerana <code>console.log()</code> dalam pengendali <code>entityPickedHandler</code> Walau bagaimanapun, peristiwa itu sepatutnya dipancarkan. </p>
P粉797855790
P粉797855790

membalas semua(1)
P粉125450549

Penetap/Penetap boleh menjadi agak rumit apabila melibatkan skop. Pendekatan biasa nampaknya betul. Mungkin cuba simpan entiti dalam sifat data dan tetapkan pendengar padanya.

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

Dikemas kini
Atau sebagai pendengar di dalam komponen component:

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

Data kemudiannya boleh dikemas kini daripada configComponent menggunakan:

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

Kemudian, dalam fail ranting configComponent的twig文件中,myentity方法用于sw-entity-single-selectv-model, kaedah myentity digunakan dalam v-model 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 %}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan