动态插入的聚合物元素中的数据绑定

前端之家收集整理的这篇文章主要介绍了动态插入的聚合物元素中的数据绑定前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有一段时间,我们需要在上下文中动态添加自定义元素.然后:

>插入的聚合物可以接收一些与另一个结合的属性
属性在上下文中,所以它可以相应地改变.
>在聚合物0.5时,我们可以使用PathObserver将属性绑定到
最近添加的组件的上下文属性.但是,我没有
在聚合物1.0中找到解决方案或等效物.

我创建了一个0.5的例子,对于1.0也是一样.参见下面的聚合物的注射代码.另外,为了清楚起见,您可以看到完整的空白示例.

Ej 0.5:

  1. <polymer-element name="main-context">
  2. <template>
  3. <one-element foo="{{foo}}"></one-element>
  4. <div id="dynamic">
  5. </div>
  6. </template>
  7. <script>
  8. Polymer({
  9. domReady: function() {
  10. // injecting component into polymer and binding foo via PathObserver
  11. var el = document.createElement("another-element");
  12. el.bind("foo",new PathObserver(this,"foo"));
  13. this.$.dynamic.appendChild(el);
  14. }
  15. });
  16. </script>
  17. </polymer-element>

请看完整的例子:http://plnkr.co/edit/2Aj3LcGP1t42xo1eq5V6?p=preview

Ej 1.0:

  1. <dom-module id="main-context">
  2. <template>
  3. <one-element foo="{{foo}}"></one-element>
  4. <div id="dynamic">
  5. </div>
  6. </template>
  7. </dom-module>
  8. <script>
  9. Polymer({
  10. is: "main-context",ready: function() {
  11. // injecting component into polymer and binding foo via PathObserver
  12. var el = document.createElement("another-element");
  13. // FIXME,there's no a path observer: el.bind("foo","foo"));
  14. this.$.dynamic.appendChild(el);
  15. }
  16. });
  17. </script>

请看完整的例子:http://plnkr.co/edit/K463dqEqduNH10AqSzhp?p=preview

你知道一些解决方法或等价物与聚合物1.0?

解决方法

现在没有直接的方法去做.您应该通过监听父元素的foo属性中的更改并监听以编程方式创建的元素的foo-changed事件来手动执行双重绑定.
  1. <script>
  2. Polymer({
  3. is: "main-context",properties: {
  4. foo: {
  5. type: String,observer: 'fooChanged'
  6. }
  7. },ready: function() {
  8. var self = this;
  9. var el = this.$.el = document.createElement("another-element");
  10.  
  11. //set the initial value of child's foo property
  12. el.foo = this.foo;
  13. //listen to foo-changed event to sync with parent's foo property
  14. el.addEventListener("foo-changed",function(ev){
  15. self.foo = this.foo;
  16. });
  17.  
  18. this.$.dynamic.appendChild(el);
  19. },//sync changes in parent's foo property with child's foo property
  20. fooChanged: function(newValue) {
  21. if (this.$.el) {
  22. this.$.el.foo = newValue;
  23. }
  24. }
  25. });
  26. </script>

你可以在这里看到一个工作示例:http://plnkr.co/edit/mZd7BNTvXlqJdJ5xSq0o?p=preview

猜你在找的HTML相关文章