【问题标题】:Creating a shadow DOM with template binding使用模板绑定创建影子 DOM
【发布时间】:2014-11-09 00:43:52
【问题描述】:

上下文。

我正在尝试仅使用 webcomponents.js 中的平台设施而不是聚合物层 (polymer.js) 中的平台设施来创建 Web 组件。典型的例子很简单并且工作正常:

<div id="wc-1">
    <span id="text">View</span>
</div>
<template id="template">
  <div>
    <h2> <content select="#text"> Default </content> 1 </h2>
  </div>
</template>
<script>
  document.addEventListener('DOMContentLoaded', function () {
     function createWC (host) {
       var host  = document.querySelector (host);
       var template = document.querySelector ('#template'); 
       var root = host.createShadowRoot ();
       root.appendChild (template.content.cloneNode (true));  
     }     
     var wc = createWC ('#wc-1');
  });

</script>

问题。

template bindings 和一个典型的激活脚本(1)扩展上面的例子,会得到一些不希望的结果。下一个代码生成两个模板内容副本,一个是由于激活代码,另一个是Shadow DOM 中未解析的数据绑定。如何激活模板并将其内容包含在shadow DOM 中?

<div id="wc-1">
    <span id="text">View</span>
</div>
<template id="template" bind="{{data}}">
    <div class="red">
        <h2> <content select="#text"> Default </content> 1 </h2>
        Created @{{now}}
    </div>
</template>
<script>
  document.addEventListener('DOMContentLoaded', function () {
    function createWC (host) {
      var host  = document.querySelector (host);
      var template = document.querySelector ('#template'); 
      var root = host.createShadowRoot ();
      template.model = { // (1)
        data : {
           now : new Date()
        }
      };
      root.appendChild (template.content.cloneNode (true));
    }
    var wc = createWC ('#wc-1');
  });
</script>

问题。

我想我在激活部分有误。有人可以帮我解决这个问题吗?提前致谢。代码可以在http://jsbin.com/tiniyu/5/edit找到

【问题讨论】:

    标签: javascript data-binding polymer


    【解决方案1】:

    您正在链接到旧版本的 platform.js (0.3.4)。看起来在最新版本的platform.js (0.4.2) 模板绑定已被删除(对于 webcomponents.js v0.4.2 应该也是如此)。

    这是一个使用聚合物站点平台主分支的示例:http://jsbin.com/pejoga/2/edit

    【讨论】:

    • 非常感谢罗布。那么,你的意思是说,即使导入了polymer.js,不使用自定义标签标准也无法创建带有模板绑定的shadow DOMS?
    【解决方案2】:

    {{x}} 语法不是&lt;template&gt; 规范的一部分,而是 Polymer 库的一部分。如果您尝试不使用 Polymer,那么它对您不起作用。

    就其本身而言,template does very little。 Polymer 添加了查找&lt;template&gt; 元素的代码,查找包含{{x}} 语法的属性或节点,并将它们弄乱。

    【讨论】:

    • 感谢 Domenic,我知道数据绑定不是标准的一部分,但正如我在帖子中所说,我只使用带有模板绑定的 webcomponents.js,它可以正常工作。它证明了数据绑定不是在 polymer.js 级别实现的,而是在平台级别实现的。我要问的是如何在影子 DOM 中应用激活
    • 嗯,我想我当时不懂webcomponents.js,我以为它只包含标准功能......这很奇怪。
    • 所有模板绑定支持都来自 TemplateBinding.js,在任何平台上都不是原生的。无论哈维尔发现什么都是误报。
    • 感谢 Scott,我要做的是通过多次调用 createShadowRoot 并为每一层使用具有数据绑定的不同模板来创建一个多层组件。有没有办法在平台级别做到这一点?如果没有,有什么方法可以在 polymer.js 级别实现我的目的吗?在您发表评论后,我意识到现在模板绑定技术只能在 polymer.js 级别使用,但据我所知,在该级别,不可能创建具有多层的组件。我对吗?非常感谢您的 cmets。
    猜你喜欢
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 2011-02-18
    相关资源
    最近更新 更多