การรวมโพลีเมอร์ไม่ทำงานใน Firefox

ฉันเห็นปัญหาที่ฉันเห็นค่า 'ทดสอบ' ที่ถูกผูกไว้ปรากฏบนหน้าสาธิตบน Chrome แต่ไม่ใช่ใน Firefox ฉันได้รวม polyfills (webcomponents-lite.js) ไว้แล้ว ดังนั้นฉันจึงไม่แน่ใจจริงๆ ว่ามีอะไรหายไป มีความคิดอะไรบ้าง?? ขอบคุณล่วงหน้า.

หน้าสาธิตรายการตั๋ว

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, minimum-scale=1, initial-scale=1, user-scalable=yes">
    <title>ticket-item demo</title>
    <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
    <link rel="import" href="/th../../iron-demo-helpers/demo-pages-shared-styles.html">
    <link rel="import" href="/th../../iron-demo-helpers/demo-snippet.html">
    <link rel="import" href="/th../../iron-ajax/iron-ajax.html">
    <link rel="import" href="/th../ticket-item.html">

    <script>
      window.addEventListener('WebComponentsReady', function() {
        let element = document.getElementById('ticket-item');
        element.test = 'test';
      });
    </script>
  </head>
  <body>
    <div class="vertical-section-container centered">
      <h3>Basic ticket-item demo</h3>
      <demo-snippet>
        <template>
          <ticket-item id="ticket-item"></ticket-item>
        </template>
      </demo-snippet>
    </div>
  </body>
</html>

องค์ประกอบรายการตั๋ว

<dom-module id="ticket-item">
  <template>
    <style include="my-theme">
      :host {
        display: block;
      }
    </style>
    <div>test: [[test]]</div>
  </template>

  <script>
    class TicketItem extends Polymer.Element {
      static get is() { return 'TicketItem'; }
      static get properties() {
        return {
          test: String
        };
      }
    }
    window.customElements.define(TicketItem.is, TicketItem);
  </script>
</dom-module>

person brainmonger    schedule 09.08.2017    source แหล่งที่มา


คำตอบ (2)


สิ่งแรก:

ชื่อองค์ประกอบที่กำหนดเอง ตามข้อกำหนดแล้ว ชื่อขององค์ประกอบที่กำหนดเอง ต้องขึ้นต้นด้วยตัวอักษร ASCII ตัวพิมพ์เล็ก และต้องมีเครื่องหมายขีดกลาง (-) นอกจากนี้ยังมีรายชื่อองค์ประกอบต้องห้ามสั้นๆ ที่ตรงกับชื่อที่มีอยู่อีกด้วย สำหรับรายละเอียด โปรดดูแนวคิดหลักขององค์ประกอบที่กำหนดเอง ส่วนในข้อกำหนด HTML

ดังนั้นคุณต้องเปลี่ยนชื่อองค์ประกอบ "รายการ"

แทนที่จะโหลด webcomponents-lite.js โดยตรง ให้โหลด webcomponents-loader.js (ตัวโหลดฝั่งไคลเอ็นต์ที่โหลดชุด polyfill ขั้นต่ำแบบไดนามิก โดยใช้การตรวจจับคุณลักษณะ) ซึ่งจะดำเนินการส่วนที่เหลือ

ลิงก์ Plkr: ใช้งานได้ทั้งใน Firefox และ Chrome

person Ofisora    schedule 09.08.2017
comment
ขอบคุณมาก Ofisora ​​ที่สละเวลาเพิ่มตัวอย่างใน plnkr ฉันตั้งใจเปลี่ยนชื่อการอ้างอิงส่วนประกอบของฉันเป็น 'รายการ' ในโพสต์นี้เท่านั้น เพื่อให้คลุมเครือมากขึ้น แต่เมื่อคุณชี้ให้เห็นว่ามันไม่ถูกต้อง ฉันจึงเปลี่ยนมันเพื่อหลีกเลี่ยงความสับสน ขอบคุณสำหรับหมายเหตุเกี่ยวกับการตั้งชื่อแบบแผน สิ่งที่แปลกคือฉันดูตัวอย่างของคุณและเห็นว่ามันทำงานใน FF และเมื่อฉันคัดลอกโค้ดเดียวกันทั้งหมดไปยังท้องถิ่นของฉัน มันก็ยังคงใช้งานไม่ได้สำหรับฉันใน FF มันแปลกมาก ฉันจะลองสร้างองค์ประกอบขึ้นมาใหม่และดูว่าจะช่วยได้หรือไม่ - person brainmonger; 09.08.2017
comment
ว้าว... ฉันพบปัญหาแล้ว... ปัญหาคือฉันตั้งชื่อส่วนประกอบของฉันว่า 'ticket-item' และรหัสถูกตั้งค่าเป็น 'ticket-item' เห็นได้ชัดว่าจะต้องเป็นสิ่งที่แตกต่างจาก 'รายการตั๋ว' ฉันเปลี่ยนรหัสเป็น 'รายการ' และตอนนี้ฉันเห็นการเชื่อมโยงแล้ว! - person brainmonger; 09.08.2017
comment
ฉันโหวตคำตอบของคุณด้วยเพราะมันมีประโยชน์มาก - person brainmonger; 09.08.2017

ปัญหาคือฉันตั้งชื่อส่วนประกอบของฉันว่า 'รายการตั๋ว' และรหัสถูกตั้งค่าเป็น 'รายการตั๋ว' เห็นได้ชัดว่าจะต้องเป็นสิ่งที่แตกต่างจาก 'รายการตั๋ว' ฉันเปลี่ยนรหัสเป็น 'รายการ' และตอนนี้ฉันเห็นการเชื่อมโยงแล้ว

person brainmonger    schedule 09.08.2017
comment
นอกจากนี้ ฉันคิดว่าฟังก์ชัน is() ของคุณควรเป็น { return 'ticket-item'; } ไม่ใช่ { return 'TicketItem'; } - person Thad; 10.08.2017