属性观察者永远不会开始"本地"属性?

时间:2015-01-12 07:51:41

标签: polymer

在Polymer(0.5.2)中,似乎无法清晰地观察到全局HTML属性,如lang?例如:

<polymer-element name="x-foo" attributes="lang bar">
  ..
  <script>
    Polymer({
        langChanged: function () .. // never fires by itself
        barChanged:  function () .. // fires just fine
    });
  </script>
</polymer-element>

有趣的是,如果元素在其他方面被弄脏,则回调会触发。例如:

..
ready: function () {
  this.lang = 'en';
}
..

这不会触发任何回调。但是:

..
ready: function () {
  this.lang = 'en';
  this.bar  = 'baz';
}
..

这会触发两个回调。因此,似乎未正确通知Polymer有关“原生”属性的更改?这是一个已知的问题?这可以解决吗?

2 个答案:

答案 0 :(得分:2)

团队建议人们不要定义与本机DOM属性/属性同名的属性/属性。 link

  

避免使用与本机DOM属性或方法相同的名称定义属性或方法,例如id,children,focus,title和hidden;结果是不可预测的。

这是因为Object.observe实际上无法观察到这些属性。它们来自浏览器内的C ++黑盒子。

我的建议是使用language代替lang

答案 1 :(得分:0)

我似乎无法重现这一点。您使用的浏览器是什么?

http://jsfiddle.net/6sqo159z/16/

当我广泛使用Polymer时,我遇到了一些类似的问题。即在IE上。

您使用的是最新版本的聚合物和平台吗? 尝试给出属性默认值,即使这些值未定义。 尝试为您的属性添加发布对象。

publish:{
    bar:"",
    lang:""
}