Polymer 在附件上,`this.$`是一个空对象
我试图观察在自定义聚合元素中添加和删除的dom节点,但没有成功。我注意到,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); }
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);