Polymer 在附件上,`this.$`是一个空对象

Polymer 在附件上,`this.$`是一个空对象,polymer,polymer-1.0,web-component,custom-element,Polymer,Polymer 1.0,Web Component,Custom Element,我试图观察在自定义聚合元素中添加和删除的dom节点,但没有成功。我注意到,this.$是一个空对象 Polymer({ is: 'dramatic-view', attached: function () { this._observer = Polymer.dom(this.$.contentNode).observeNodes(function (info) { console.log('kromid info', info); }

我试图观察在自定义聚合元素中添加和删除的dom节点,但没有成功。我注意到,
this.$
是一个空对象

  Polymer({
    is: 'dramatic-view',
    attached: function () {
      this._observer = Polymer.dom(this.$.contentNode).observeNodes(function (info) {
        console.log('kromid info', info);
      });
    }
  });
使用以下奇怪参数仅调用回调一次(即使之后更改了内容):


我一直在关注文档。

这。$
是模板中具有
id
属性的元素的散列(请参阅)

因此,要使
this.$.contentNode
存在,您需要在
中使用
id=“contentNode”
元素,并且如果
dom repeat
模板,则该元素不得位于
dom中:

<dom-module id="x-foo">
  <template>
    <content id="contentNode"></content>
  </template>
</dom-module>
要触发节点观察者,请使用以下命令:

Polymer.dom(this).appendChild(node);
Polymer.dom(this).removeChild(node);


更新您似乎正在将Polymer与Elm集成,并希望看到observer回调对my Elm进行的节点更改。您需要以某种方式将Elm的调用挂接到
appendChild
/
removeChild
,以便它使用Polymer的DOM API。

我感觉我们很接近了。。添加
id
修复了空对象,现在
已经存在。但是,当我更改内容时,回调没有运行。您如何更改内容?它是在
Elm
虚拟dom中执行的,我猜它正在调用
appendChild
请参阅使用Codepen演示更新的答案。不确定这是否可行,但您需要将Elm的调用挂接到
appendChild
/
removeChild
,以便它使用Polymer的DOM API。什么?这不是本地元素的功能吗?或者观察孩子们这只是一个聚合物api?无法更改Elm虚拟dom。它是编译器的一部分。
Polymer.dom(this).appendChild(node);
Polymer.dom(this).removeChild(node);