假设我有两个不同的polymer-elements
一个应该使用content
占位符嵌入到另一个内部。是否可以在这两个嵌套之间进行数据绑定polymer-elements
?
我试过了,但我无法让它工作:http: //jsbin.com/IVodePuS/11/
根据http://www.polymer-project.org/articles/communication.html#binding data-binding betweenpolymer-elements
应该可以工作(在那些例子中,它们是在template
标签内完成的,没有使用content
占位符)。
更新:
Scott Miles 澄清说,数据绑定仅适用于该template
级别。
但是在我的情况下,我事先不知道确切的template
内容,但我想允许我的用户parent-element
指定child-element
它应该包含的内容(前提是有不同的child-elements
.
我认为这个问题与这个问题有关:Using template defined in light dom在 Polymer 元素内
我更新了下面的示例以突出显示他的:
<polymer-element name="parent-element" >
<template >
<div>Parent data: {{data1}} </div>
<content />
</template>
<script>
Polymer('parent-element', {
data1 : '',
ready: function() {
this.data='parent content';
}
});
</script>
</polymer-element>
<polymer-element name="child-element" attributes="data2">
<template>
<div>Parent data: {{data2}} </div>
</template>
<script>
Polymer('child-element', {
data2 : '',
ready: function() {
}
});
</script>
</polymer-element>
<polymer-element name="child2-element" attributes="data2">
<template>
<div>Parent data: {{data2}} </div>
</template>
<script>
Polymer('child2-element', {
data2 : '',
ready: function() {
}
});
</script>
</polymer-element>
用户可以选择child-element
要嵌入的内容:
<parent-element data1 = "test">
<child-element data2="{{data1}}"/>
</parent-element>
<parent-element data1 ="test" >
<child2-element data2="{{data1}}"/>
</parent-element>
解决方法:
我发现的唯一解决方法是添加change watcher
并使用getDistributedNodes()
来获取子元素并手动设置data2
为data
:
<polymer-element name="parent-element" >
<template >
<div>Parent data: {{data}} </div>
<content id="content"/>
</template>
<script>
Polymer('parent-element', {
data : '',
ready: function() {
this.data='parent content';
},
dataChanged : function() {
contents = this.$.content.getDistributedNodes();
if (contents.length > 0) {
contents[0].data2 = this.data;
}
},
});
</script>
</polymer-element>