@observable和@published之间有什么区别

问题描述:

直到聚合物0.10.1 @published注释在它声明的Polymer元素上创建了一个属性。
这改变了聚合物0.11.0。从那时起,需要@PublishedProperty(reflect: true)才能将字段值作为属性提供。@observable和@published之间有什么区别

看来,由于此更新@published@observable具有相同的效果。我错过了什么吗?

+1

你必须在'@ tenured'之​​前拥有'@ published'。 – 2014-09-10 16:18:55

+0

也许:-)。 。 – 2014-09-10 16:21:45

@published属性仍然允许您以声明方式将该值用作HTML中的属性本身。也就是说,你仍然可以做:

<my-element myprop="{{hello}}"></my-element> 

的变化是,通过attributes财产在程序访问该值,则必须包括@PublishedProperty(reflect: true)。 (这似乎不是,如果你是直接与CustomTag类互动是这样

需求@PublishedProperty(reflect: true)

var x = querySelector('x-foo'); 
x.bar = "hi"; 
// ... 
print(x.attributes["bar"]); 

这也需要@PublishedProperty(reflect: true)

/* CSS */ 
x-foo[bar="hi"] { background-color: blue; } 

这不:

XFoo x = querySelector('x-foo'); 
x.bar = "hi"; 
... 
print(x.bar); 

这是从讨论中推断的g roup for New Polymer Release 0.12.0

+0

太棒了!感谢您的链接。我想我需要再次阅读这个讨论。直接与CustomTag类交互不需要任何注释,现有字段就足够了。 – 2014-09-10 16:24:49

+0

您认为如果'reflect:true'是默认值,并且参数注释将用于另一种情况'@PublishedProperty(reflect:false)',那么它会更方便吗?我想这是以这种方式使用的,因为'reflect:true'也用于Polymer.js。自从引入此更改后,我不需要发布具有'reflect:false'的属性。 – 2014-09-10 16:29:13

+0

个人而言,我很少使用'属性'与我的组件进行交互,只是以声明方式绑定两种方式。所以我根本不需要'@PublishedProperty(反映:true)'。 – 2014-09-10 16:49:15