搜尋

首頁  >  問答  >  主體

重新設計Shopware管理CMS元件編輯器的介面視圖

<p>在創建一個新的CMS元素,用於Shopware的所見即所得編輯器中,我們有三個組件:一個名為<code>component</code>,另一個名為<code> configComponent</code>,還有一個名稱為<code>previewComponent</code>。 </p> <p><code>configComponent</code>顯然用於選擇元素的配置,而<code>component</code>元件用於更新編輯器中的視圖。例如,顯示在配置部分中選擇的內容。我的問題是,它只會在用戶點擊儲存按鈕後才會更新編輯器中的視圖,這會導致糟糕的用戶體驗 - 它應該即時更新。 </p> <p><strong>我認為我需要在從<code>configComponent</code>選擇實體ID後以某種方式<code>$emit</code>一個更新事件</strong>,然後將所選實體的ID傳遞給<code>component</code>元件。 </p> <p>所以,在<code>component</code>的twig中,我有以下程式碼:</p> <pre class="brush:js;toolbar:false;"> <config-component @entity-picked="entityPickedHandler" /> </pre> <p>根據我對文件的理解,這應該在從<code>configComponent</code>發出<code>entity-picked</code>事件時調用<code>component</code>中的>事件時調用<code>component</code>中的>事件時調用<code>component</code>中的>事件中的> "entityPickedHandler"方法。 </p> <p>例如,這是<code>component</code>中的事件處理方法:</p> <pre class="brush:js;toolbar:false;">methods: { entityPickedHandler(data) { console.log('觸發事件:', data); } } </pre> <p>然後,從<code>configComponent</code>中發出事件:</p> <pre class="brush:js;toolbar:false;">computed: { myEntity: { get() { return this.element.config.entity.value; }, set(value) { // this.$set(this.element.data, 'entityId', value); this.element.config.entity.value = value; console.log('嘗試發出entity-picked事件'); this.$emit('entity-picked', value); } } } </pre> <p>顯然,這不起作用,因為<code>entityPickedHandler</code>處理程序中的<code>console.log()</code>從未輸出。然而,事件應該已經發出了。 </p>
P粉797855790P粉797855790507 天前666

全部回覆(1)我來回復

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

    回覆
    0
  • 取消回覆