首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套聚合物元素之间的数据绑定

嵌套聚合物元素之间的数据绑定
EN

Stack Overflow用户
提问于 2014-05-07 23:28:56
回答 3查看 13K关注 0票数 13

假设我有两个截然不同的polymer-elements

一个应该使用content占位符嵌入到另一个中。可以在这两个嵌套的polymer-elements之间进行数据绑定吗?

我试过了,但我不能让它工作:http://jsbin.com/IVodePuS/11/

根据http://www.polymer-project.org/articles/communication.html#binding的说法,polymer-elements之间的数据绑定应该是有效的(在这些示例中,它们是在template标记内完成的,没有使用content占位符)。

更新:

Scott Miles澄清说,数据绑定只在template级别上工作。

然而,在我的例子中,我事先不知道确切的template,但我想让我的parent-element的用户指定它应该包含哪个child-element (假设有不同的child-elements )。

我认为这个问题与这个问题有关:Using template defined in light dom inside a Polymer element

我更新了下面的示例,以突出显示他的:

代码语言:javascript
复制
<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

代码语言:javascript
复制
<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

代码语言:javascript
复制
<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>
EN

回答 3

Stack Overflow用户

发布于 2014-05-08 01:38:59

聚合物数据绑定的工作原理是将模型附加到整个子树上。

你写道:

代码语言:javascript
复制
<parent-element>
  <child-element data2="{{data}}"/>
</parent-element>

这意味着parentNode提供绑定模型的规则。但现在假设你想要写:

代码语言:javascript
复制
<parent-element>
  <div>
    <child-element data2="{{data}}"></child-element>
  </div>
</parent-element>

现在你有问题了。

相反,在聚合物的例子中,你会注意到{{}} (几乎总是)在模板内。例如,如果我定义:

代码语言:javascript
复制
<polymer-element name="host-element" attributes="data" noscript>
<template>
  <parent-element data1="{{data}}">
    <child-element data2="{{data}}"></child-element>
  </parent-element>
</template>
</polymer-element>

现在,我有了一个模型上下文(host-element),我可以使用它将模板描述的整个子树中的内容绑定在一起。

请注意,我不需要attributes="data"来让它工作。我添加了so host-element公开data,我可以这样做:

代码语言:javascript
复制
<host-element data="test"></host-element>  

http://jsbin.com/IVodePuS/15/edit

票数 6
EN

Stack Overflow用户

发布于 2014-12-17 18:11:56

就像一种护身符。父元素是发布属性数据,可以通过双向数据绑定。这样,子元素将获得相同的数据。

代码语言:javascript
复制
<polymer-element name="custom-element">
<template>
    <parent data="{{data}}">
        <child data="{{data}}"></child>
    </parent>
</template>
<script>
    Polymer({
        ready: function() {

        },
        data: {}
    });
</script>

票数 0
EN

Stack Overflow用户

发布于 2016-04-22 16:26:05

我认为在聚合物>= 1.0中,这应该使用"Auto-binding template“来完成。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23522037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档