首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用引导带和模板标记

使用引导带和模板标记
EN

Stack Overflow用户
提问于 2015-07-31 15:37:17
回答 2查看 2.4K关注 0票数 2

我一直在学习普通版的web组件,并遇到了麻烦。当尝试使用模板标记(特别是容器类)内的引导程序网格时,它不会对其应用任何引导样式。

代码语言:javascript
复制
//Template File
<template>

  <top-bar>
    <div class="container">
      <h1>Hello World</h1>
    </div>
  </top-bar>

</template>

<script>
  var el = document.querySelectorAll('top-bar');
  if(el != null) {
    //Custom Elements
    document.registerElement('top-bar');
    //Import Elements
    for(var i = 0; i < el.length; i++) {
      var shadow = el[i].createShadowRoot();
      var template = document.querySelector('#topbar').import.querySelector('template');
      var clone = document.importNode(template.content, true);
      shadow.appendChild(clone);
    }
  }
</script>

一般的引导样式(字体、样式重置等)正在正确应用,没有出现控制台错误。

代码语言:javascript
复制
//Index File
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Web Components</title>
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
  <link rel="import" href="topbar.html" id="topbar">
</head>
<body>

  <top-bar></top-bar>

</body>
<script src="http://code.jquery.com/jquery-2.1.4.min.js">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
</html>

我尝试将引导程序的链接和脚本文件放在模板文件中(但是在模板标记之外,链接标记不会在模板标记中呈现)。引导程序将加载,就像我在索引页上调用它一样,但是容器仍然不会从Bootstrap继承任何样式。

任何你能提供的帮助都是非常感谢的!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-17 15:37:30

阴影DOM停止CSS传播。如果您想要自然的CSS传播,不要使用Shadow DOM。

代码语言:javascript
复制
var shadow = el[i] //.createShadowRoot();  //will work

PS:

1°)使用<template>是错误的:不要使用嵌套的<top-bar>标记。

2°)使用registerElement是毫无意义的。给你的新元素一个原型。

没有影子DOM的自定义元素和模板的topbar.html的正确实现如下:

代码语言:javascript
复制
<template>
    <div class="container">
        <h1>Hello World</h1>
    </div>
</template>

<script>

//Import Elements
var template = document.querySelector('#topbar').import.querySelector('template');

//Custom Elements
var topBar = Object.create( HTMLElement.prototype )

topBar.createdCallback = function ()
{
    var shadow = this //.createShadowRoot()
    var clone = document.importNode( template.content, true );
    shadow.appendChild( clone );
}

document.registerElement( 'top-bar', { prototype: topBar } );

</script>
票数 2
EN

Stack Overflow用户

发布于 2019-03-01 17:38:55

请注意我在3月1日-2019年谷歌Chrome收到的信息:

不推荐的document.registerElement是不推荐的,并将在M73中删除,大约2019年3月。请改用window.customElements.define。有关更多详细信息,请参阅https://www.chromestatus.com/features/4642138092470272

现在,insteadOf : document.registerElement(‘Appro证-btn’,{ prototype: myCustomElement } );

..。现在看来我们需要这样做:

代码语言:javascript
复制
customElements.define("approve-btn", myCustomElement);

mycustomElement应该是这样的类:

代码语言:javascript
复制
class ApproveBtn extends HTMLElement {
  constructor() {
    // Always call parent constructor first
    super();

    // Get template content from DOM
    this.template = document.getElementById("approve-btn");
    this.templateContent = this.template.content;

    this.appendChild(this.templateContent);


  }
 }

然后最后执行:

代码语言:javascript
复制
customElements.define("approve-btn", ApproveBtn);
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31750049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档