Polymer 1.0模板绑定ref等效

时间:2015-05-28 20:41:31

标签: polymer

在Polymer 0.5中,您可以这样做:

<template bind ref="howdyTpl"></template>
...
<template id="howdyTpl">Howdy {{whatever}}</template>

ID为{howdyTpl'的模板会在ref属性中引用的位置标记。

如何在Polymer 1.0中做类似的事情?

2 个答案:

答案 0 :(得分:1)

这是一个类似的自定义元素。

Polymer({
  is: 'bind-ref',

  properties: {
    ref: {
      type: String,
      observer: 'refChanged',
    },
  },

  refChanged: function(newRef, oldRef) {
    if (oldRef != undefined) {
      this._removeChildren();
      this._stamp();
    }
  },

  _stamp: function() {
    this._parent = Polymer.dom(this).parentNode;
    var rootEl = this._parent;
    while (Polymer.dom(rootEl).parentNode) {
      rootEl = Polymer.dom(rootEl).parentNode;
    }

    var tpl = Polymer.dom(rootEl).querySelector('#' + this.ref);
    var tplRoot = tpl.stamp().root;
    this._children = Array.prototype.slice.call(tplRoot.childNodes);
    Polymer.dom(this._parent).insertBefore(tplRoot, this);
  },

  _removeChildren: function() {
    for (var i = 0; i < this._children.length; i++) {
      Polymer.dom(this._parent).removeChild(this._children[i]);
    }
  },

  attached: function() { this._stamp(); },
  detached: function() { this._removeChildren(); },
});

目标模板元素必须是dom-template元素。

<bind-ref ref="howdyTpl"></bind-ref>
<template is="dom-template" id="howdyTpl">Howdy <span>{{whatever}}</span></template>

(已获得许可的代码段Apache 2.0。)

答案 1 :(得分:1)

I've created an element that resolves this problem.这是一种黑客攻击,但它有效......包括多深度文件包含和数据绑定,而另一个答案提供的无法处理。