小编Aar*_*son的帖子

Polymer 2动态合并模板

我正在尝试构建呈现JSON对象集合的通用Web组件,如树视图和多列表视图(在两个列表之间移动项目).我想复制iron-list使用的模式,其中包含单个项目表示的模板被传递到组件中以供重用.

例如,给定此Web组件模板:

<dom-module id="intworkspace-tree">  
  <template>
    <style include="iron-flex iron-flex-alignment">

      paper-icon-item {
        --paper-item-min-height: var(--intworkspace-tree-margin,30px);
        --paper-item-icon-width : var(--intworkspace-tree-margin,30px);
      }

      paper-icon-item:focus::before,
      paper-icon-item:focus::after {
        color: inherit;
        opacity: 0;
      }

     .node {
        margin-left: var(--intworkspace-tree-margin,30px);;
      }
    </style>

    <slot id="labelView"></slot>

    <template id="nodeView">
      <div class="layout vertical">
      <paper-icon-item on-tap="nodeSelected">
        <iron-icon icon="expand-less" slot="item-icon" hidden$="[[!hasNodes(node)]]"></iron-icon>
        <!-- label goes here-->
      </paper-icon-item>

      <iron-collapse class="node" opened hidden$="[[!hasNodes(node)]]">
        <intworkspace-tree tree="[[node.nodes]]" embedded></intworkspace-tree>
      </iron-collapse>
      </div>
  </template>

  </template>
	...
  </dom-module>
Run Code Online (Sandbox Code Playgroud)

这个用法:

 <intworkspace-tree tree="{{testTree}}">
      <template><paper-item-body>[[node.name]]</paper-item-body>  </template>
  </intworkspace-tree>
  
Run Code Online (Sandbox Code Playgroud)
我想将JSON树数组呈现在一个层次结构中,该层次结构将Web组件的模板与通过槽提供的模板相结合,以呈现不透明的JSON对象.到目前为止,我已经确定了两种组合模板的方法:

  1. 利用Polymer.Templatize.templatize API加载模板,创建/标记新实例,并使用DOM API将它们附加在一起,并将它们添加到Web组件的shadow DOM中.

  2. 访问模板内容,将它们组合在一起,创建和导入新模板,然后根据需要克隆它.

在经历了很多逆境之后,我能够成功地实现#1而不是#2,这是我的问题的动力.#2对我来说更吸引人,因为我更容易合并模板一次而不是合并他们生成的标记实例,这种方法似乎是我可以重用嵌套模板(如dom-repeat)的唯一方法.

我的主要障碍是,一旦聚合物或者它的聚合物填充,模板变得不透明,并且只能被聚合物模板化功能使用.例如,此代码在没有任何Polymer导入的情况下工作正常:

<template>
  <div>Template Contents</div>
</template>
<div> …
Run Code Online (Sandbox Code Playgroud)

polymer polymer-2.x

7
推荐指数
1
解决办法
1341
查看次数

标签 统计

polymer ×1

polymer-2.x ×1