从dom-repeat访问元素的属性

时间:2017-02-27 11:35:03

标签: javascript dom polymer polymer-1.0

我在我的元素中使用dom-repeat模板,我想在新元素中使用该元素(typeElement)的属性<custom-element>({{1 } {}来自<media-element>

dom-repeat

我该怎么做?

3 个答案:

答案 0 :(得分:1)

我不确定“使用该属性”是什么意思,所以我在下面做出假设。

假设您要将<media-element>.someProp设置为<custom-element>.typeElement的值,那么您的数据绑定是正确的。只要typeElement的值发生变化,someProp就会设置为相同的值。您可以使用<media-element>的{​​{1}}方法访问该值。例如:

this.someProp

假设您还希望更改<dom-module id="media-element"> <template>...</template> <script> Polymer({ is: 'media-element', properties: { someProp: Number }, foo: function() { console.log(this.someProp); } }); </script> </dom-module> 更新<media-element>.someProp,那么您需要在<custom-element>.typeElement的属性声明中设置notify: true

someProp

// media-element
properties: {
  someProp: {
    type: Number,
    notify: true  // <-- only needed for upward notifications (two-way data binding and observers)
  }
}
HTMLImports.whenReady(() => {
  Polymer({
    is: 'custom-element',
    properties: {
      typeElement: {
        type: Number,
        value: 100,
        observer: '_typeElementChanged'
      }
    },
    _typeElementChanged: function(typeElement) {
      console.log('new typeElement', typeElement);
    }
  });
  
  Polymer({
    is: 'media-element',
    properties: {
      someProp: {
        type: Number,
        notify: true
      }
    },
    _logSomeProp: function() {
      console.log('someProp', this.someProp);
    },
    _incrementSomeProp: function() {
      this.someProp++;
    }
  });
});

codepen

我建议阅读Polymer Data Binding

答案 1 :(得分:0)

因为设置属性如: typeElement: Number无效。您必须像定义array属性一样定义它。这样:

typeElement: {
 type: Number,
 value: Number,
}

我不知道你想拥有什么价值。在此之后它应该工作

答案 2 :(得分:0)

好的,我想我自己,问题不在这里。问题出在子元素(<media-element>)上。所以我将发布一个新问题来解决问题:

如何在元素创建之前初始化元素的属性?或者,如何在属性更改/初始化之后触发dom-if调用我的条件函数?

我的代码:

<dom-module id="media-element">
  <template>
    <template is="dom-if" if="[[isType(0)]]">
      ....
    </template>
  </template>

  <script>
    Polymer({
      is: 'media-element',
      properties: {
        myType: {
          type: Number,
          value: 0
        }
      },
      isType: function(t){return (this.myType===t);}
    });
  </script>
</dom-module>

更新:我发送了我的问题并收到了一个goode答案:here