属性应该传递对象吗?

时间:2014-02-18 23:30:42

标签: polymer

当我将值传递给聚合物元素属性时,我可以通过Polymer的数据绑定传递一个对象。但是,如果我决定离开“polymer-land”并想要将属性设置为对象,我就不能。我应该将对象传递给属性吗?

如果答案是“否,你应该使用方法” 然后一个后续问题是,“我可以在没有进入Polymer框架的情况下调用元素的方法吗?”例如,如果我有一个Polymer元素:

<hello></hello>

我希望访问一个名为“world”的方法。在Polymer中,它将是:

this.$.hello.world();

是否可以在不使用Polymer元素定义的情况下调用此方法?

2 个答案:

答案 0 :(得分:8)

从聚合物内部

正如您所指出的,在Polymer内部,可以使用数据绑定将对象绑定到已发布的属性:

<polymer-element name="other-el">
  <template>
    <hello-world persons="{{persons}}"></hello-world>
  </template>
  <script>
    Polymer('other-el', {
      created: function() {
        this.persons = [{'name': 'Eric'}, {'name': 'Bob'}];
      }
    });
  </script>
</polymer-element>

从聚合物外部

从Polymer外部,Polymer元素还支持属性的序列化数组/对象property type is hinted

<hello-world persons="[{'name': 'Eric'}, {'name': 'Bob'}]"></hello-world>

因为.persons是元素的属性,所以你也可以在JS中设置它:

document.querySelector('hello-world').persons = [{'name': 'Eric'}, {'name': 'Bob'}];

答案 1 :(得分:1)

所以回答我自己的问题。

我认为属性不应该传递给对象。如果需要将对象传递给元素,请使用元素方法。

要调用方法,可以使用简单的元素选择和方法调用。

document.querySelector('hello').world();

我以为我曾经尝试过这个并没有用。

-Jay