cari

Rumah  >  Soal Jawab  >  teks badan

Reka bentuk semula paparan antara muka editor komponen CMS pengurusan Shopware

<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粉797855790P粉797855790499 hari yang lalu658

membalas semua(1)saya akan balas

  • P粉125450549

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

    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 %}
    

    balas
    0
  • Batalbalas