【发布时间】:2014-05-07 15:28:56
【问题描述】:
假设我有两个不同的polymer-elements
应该使用content 占位符将一个嵌入到另一个内部。
是否可以在这两个嵌套的 polymer-elements 之间进行数据绑定?
我试过了,但我不能让它工作:http://jsbin.com/IVodePuS/11/
根据http://www.polymer-project.org/articles/communication.html#bindingpolymer-elements 之间的数据绑定应该可以工作(在这些示例中,它们是在template 标记内完成的,而不使用content 占位符)。
更新:
Scott Miles 澄清说,数据绑定仅适用于 template 级别。
但是在我的情况下,我事先不知道确切的template,但我想允许我的parent-element 的用户指定它应该包含哪个child-element(假设有不同的child-elements。
我认为这个问题与这个问题有关:Using template defined in light dom inside a Polymer element
我更新了下面的例子来突出他的:
<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>
【问题讨论】:
-
正是我需要做的。我今天会试试你的解决方案
标签: data-binding polymer web-component shadow-dom