通过Polymer中的内容标签访问包含的light DOM
Accessing the light DOM included by means of a content tag in Polymer
上下文:
我正在Maverics MacOX(10.9.2(&Chrome代理(34.0.1847.131(构建web组件。特别是,我正试图通过content
标签来部分丰富其他模板中包含的两个成分(foo
和bar
(。富集包括添加新的属性,以便在它们各自的内部模板中使用它们(第(3(行和第(4(行(。我不确定这种方法是否能正常工作,这正是我所需要的。但这让我想到了以下问题。
问题:
我正试图通过内容标签从JS访问模板中包含的light-DOM
节点。从本质上讲,我的意图可以在下面的片段中描述出来。我需要访问第(1(行和第(2(行中的节点foo
和bar
:
<polymer-element name="wc-tag">
<template>
<div id="container">
<content select="[role='rA']"></content>
<content select="[role='rB']"></content>
</div>
</template>
<script>
Polymer ('wc-tag',{
domReady: function () {
var c = this.$.container;
var rA = c.querySelector ('[role="rA"]'); // (1)
var rB = c.querySelector ('[role="rB"]'); // (2)
rA.setAttribute ('mode', 'active'); // (3)
rB.setAttribute ('editable', true); // (4)
...
}
});
</script>
</polymer-element>
<wc-tag>
<wc-foo role="rA">Foo</wc-foo>
<wc-bar role="rB">Bar</wc-bar>
</wc-tag>
然而,在rA
和rB
中都获得了零值。我已经确认,在评估代码时,content
标签尚未解析(content
是<div id="container">
的两个独生子(。
问题:
有人知道我如何/何时可以/应该访问foo
和bar
吗?
这里有一个jsbin示例,说明如何使用<content>
元素和getDistributedNodes方法来实现这一点。
<polymer-element name="x-foo">
<template>
<h1>Hello from x-foo</h1>
<content id="content" select='[role="rA"]'></content>
</template>
<script>
Polymer('x-foo', {
domReady: function() {
var baz = this.$.content.getDistributedNodes()[0];
baz.setAttribute('active', true);
}
});
</script>
</polymer-element>
<x-foo>
<div role="rA">rA element</div>
</x-foo>
技巧,我还没有用Polymer完成这项工作,所以这里有一些猜测。让我知道这是否有效(如果不有效,请发布一个jsbin:(
以下是我的理解。在shadow-dom中,<content>
节点并不完全具有作为子节点的<wc-foo/bar>
元素。这些仍然是光域的一部分,它们只是被有效地复制了一遍。因此,因为您在阴影dom中查询具有role="rA"
的元素的this.$.container
的子元素,所以您找不到它们,因为它们在灯光dom中。有两个选项:您可以为<content>
节点提供标识属性,这样您就可以选择它们,然后对它们调用getDistributedElements((;或者你可以做this.querySelector
而不是this.$.container.querySelector
。
相关阅读:如何设计分布式节点的样式
- 如何访问对象内部的“categoryIds”字段/键,该对象包含mongodb's `ObjectId(s)`数
- 访问键中包含空格的嵌套属性
- JavaScript 自包含函数数组访问自我索引
- 如何访问嵌套的表单ng包含范围/字段
- 包含的html中的类无法访问父文件html中的函数
- SVG在嵌入时可访问,但在包含时不可访问
- 如何访问本地json文件并在纯JavaScript和AJAX上加载包含内容的菜单
- 我如何不允许包含我的网站访问页面数据
- WinJS-访问包含在绑定listView模板之外的数据
- 级联 AJAX 响应,以访问未包含在 JSON 对象中的“有孩子”的对象
- 是否可以在js脚本中包含php文件并访问该php文件的功能
- 从包含的视图模型访问组件视图模型
- 如何使用包含对象键名的变量访问对象属性
- 如何使用angularjs访问包含在文件中定义的变量
- 访问包含 ng 的 DOM 节点
- 如何从 Blogger 页面(其中包含投票)存储和访问 javascript 变量,而无需从我自己的服务器托管博客
- 如何使用 RESTful 访问加载包含 AngularJS 的 HTML
- 访问包含关键字的 JavaScript 对象属性
- 挖空.js访问包含视图模型中的容器模型属性
- JavaScript 函数包含可以相互访问的对象