2015-01-02 12 views
10

Tôi đang tìm hiểu các thành phần web có gốc bóng và dường như không thể tìm thấy trên google nếu tải các bảng định kiểu bên ngoài có thể với mã out-of-the-box? Tôi KHÔNG sử dụng polymer hoặc bất kỳ thư viện thành phần web nào khác (chưa). Mã bên dưới:Bảng định kiểu bên ngoài cho shadow dom trong các thành phần web

<script src="../../libs/jquery-2.1.1.min.js"></script> 
<script> 
    var hollaProto = Object.create(HTMLElement.prototype); 
    hollaProto.createdCallback = function() { 
     var shadow = this.createShadowRoot(); 
     var content = document.querySelector('link[rel=import]').import.querySelector("div"); 

     $("button[data-command=holla]", content).on("click", function() { alert("Holla!"); }); 

     shadow.appendChild(content); 
    }; 
    var hollaWidget = document.registerElement("holla-back", { 
     prototype: hollaProto 
    }); 
</script> 
<div class="holla-back"> 
    <button data-command="holla">Holla!</button> 
</div> 

Nếu tôi đặt thẻ liên kết của mình lên trên, trên thẻ tập lệnh đầu tiên, tôi tạo kiểu toàn bộ web, nhưng không phải thành phần web.

Nếu tôi đặt nó dưới div.holla-back, nó không tạo kiểu gì cả.

Làm thế nào để bạn sử dụng biểu định kiểu bên ngoài với cấu phần web?

Trả lời

9

Thẻ liên kết là trơ trong Shadow DOM according to the spec. Tuy nhiên, bạn có thể sử dụng @import, mặc dù điều đó có vấn đề về hiệu suất riêng.

Cách Polymer hoạt động xung quanh việc này là xem các thẻ link và sử dụng xhr để tải các kiểu đó và áp dụng chúng.

chỉnh sửa:

The folks làm việc trên DOM bóng nhận thức được những thiếu sót này và rằng nó cần phải được cố định. Hy vọng rằng trong tương lai chúng ta có thể đưa ra một hệ thống hỗ trợ các bảng định kiểu bên ngoài.

+0

Bạn có thể làm rõ bằng cách sử dụng @import không? –

+2

Bạn có thể làm một cái gì đó như thế này: http://jsbin.com/qefoyi/1/edit nhưng sử dụng nặng @import sẽ gây ra rất nhiều yêu cầu http và thực sự làm chậm trang của bạn. Cách tiếp cận được khuyến nghị là sử dụng các phần tử kiểu với tất cả đánh dấu của bạn bên trong chúng. – robdodson

+0

Tôi hiểu ý của bạn là gì. Đó là xấu xí nhưng đạt được những gì tôi muốn, mặc dù bạn đang phải ở chỗ nó thêm rất nhiều yêu cầu. –

0

Shadow DOM không phản ứng với thẻ liên kết. Infact, Chrome 41 ném một lỗi khi bạn sử dụng thẻ liên kết. Chúng tôi đã làm việc xung quanh giới hạn đó bằng cách nội tuyến các lớp CSS vào thời gian xây dựng bằng cách sử dụng lưu hóa. Điều này hóa ra khá tiện dụng trong việc tách CSS của bạn và định nghĩa thành phần.

Các vấn đề liên quan