代码之家  ›  专栏  ›  技术社区  ›  fefe

页面加载后的web组件被破坏

  •  0
  • fefe  · 技术社区  · 5 年前

    我创建了一个自定义元素(web组件),使用webpack将呈现没有任何问题,但正如我在工作页面(这是一个wordpress)上所包含的一样,render将显示出来,在请求结束时,呈现的元素将被销毁。我在控制台中没有任何错误。

    import moment from "moment";
    import 'moment/min/moment-with-locales'
    moment.locale('de');
    
    export class ToursEvents extends HTMLElement {
        constructor() {
            super();
            //this.attachShadow({mode: 'closed'});
        }
    
        connectedCallback() {
            this.html = this.innerHTML;
        }
    
        get data() {
            return this._data;
        }
    
        set data(tours) {
            let times = tours[0]
            this._data = tours[0];
            this.vendors = tours[1];
            let div = document.createElement("div");
            div.innerHTML = `
            ${times.reduce((acc, item) => `${acc}
                    <div class="bk_day tours-list__slot">
                        <div class="bk_date tours-list__date">${moment(item.day).format("dddd")}, ${moment(item.day).format("DD.MM.YYYY")}</div>
                        <ul class="tours-list__vendors">${ this.makeList(item.times) }</ul>
                    </div>`
                , ``)}`;
    
            this.innerHTML = div.innerHTML
            //this.shadowRoot.appendChild(div);
        }
    
        makeList(times) {
            let list = '';
            times.map( (time) => {
                const eventId = time.event_id;
                const vendor = this.vendors[eventId];
                let percentageFree = 0, mark = "", availability ="", workload = typeof(WORKLOAD) !== 'undefined' ? WORKLOAD : 0.8;
    
    
    
                let tips = '';
                list += '<li data-date="' + time.date + '" data-event-id="' + eventId + '" class="' + mark + '">';
                list += '<div class="tours-list__time">' + moment(time.date).format('HH.mm') + ' - ' + moment(time.date).format('HH.mm') +'</div>';
    
                if(vendor.title.includes("Discount")) {
                    tips += '<div><span class="discount">Spar-tipp!</span></div>';
                }
    
                list += '<div class="tours-list__title">' + tips + vendor.title + '</div>';
                if(time.available_slots != 0) {
                    list += '<div class=""><button class=""><span class="bk_info_text">Infos/Tickets</span> <span class="icon-down"></span></button></div>'
                } else {
                    list += '<div class="bk_info"><span>Booked</span></div>'
                }
    
                list += '</li>';
            });
    
            return list
        }
    
    
        showDetails() {
        }
    
    
    }
    
    customElements.define('tours-events', ToursEvents);
    

    我应该如何调试这个问题?

    1 回复  |  直到 5 年前
        1
  •  0
  •   Danny '365CSI' Engelman    5 年前

    enter image description here 如果你跑了 customElements.define('tours-events', class{});

    你得到了 undefined 你知道(WordPress?)已将您重定向到另一页。

    如果出现DOM异常,则定义元素

    如果您的元素不在DOM中(如果这是您对'destroyed'的意思)
    您必须单步执行控制台调试器,才能找到删除它的原因。

    debugger; 语句,并从那里获取它。