属性观察器从不触发 "native" 属性?

Attribute watchers never fire on "native" attributes?

在 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 没有正确地收到有关 "native" 属性更改的通知?这是一个已知的问题?这可以解决吗?

我似乎无法重新创建它。您使用的是什么浏览器?

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

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

您使用的是最新版本的 Polymer 和平台吗? 尝试为您的属性提供默认值,即使这些值未定义。 尝试为您的属性包含一个发布对象。

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

团队建议人们不要定义与原生 DOM properties/attributes 同名的 properties/attributes。 link

Avoid defining a property or method with the same name as a native DOM property or method, such as id, children, focus, title and hidden; the results are unpredictable.

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

我的建议是使用 language 而不是 lang