onclick内联脚本可以';阴影dom中的t引用id(Polymer v2.0)

onclick内联脚本可以';阴影dom中的t引用id(Polymer v2.0),polymer,Polymer,考虑一下 ... 什么是儒学? 儒学 ... 不行 我正在使用聚合物v2.0。当我点击按钮时,dialog.open()失败并显示对话框未定义 在Polymer的前一个版本中,这段代码是有效的,但现在我已经升级了我的代码,我必须在使用纸质对话框元素的任何地方清除这个问题。我目前的解决方案是在我的代码中的所有按钮上单击添加一个属性,然后手动编写一个绑定函数并执行这个。$…open()但我不明白为什么我必须这么做,这对我来说似乎是个问题,因为我写的代码更乏味,而且这种事后兼容性似乎更像是新版本

考虑一下


...
什么是儒学?
儒学

...
不行

我正在使用聚合物v2.0。当我点击按钮时,
dialog.open()
失败并显示对话框未定义

在Polymer的前一个版本中,这段代码是有效的,但现在我已经升级了我的代码,我必须在使用纸质对话框元素的任何地方清除这个问题。我目前的解决方案是在我的代码中的所有按钮上单击添加一个属性,然后手动编写一个绑定函数并执行
这个。$…open()
但我不明白为什么我必须这么做,这对我来说似乎是个问题,因为我写的代码更乏味,而且这种事后兼容性似乎更像是新版本的一个缺点


我真的做错了什么吗?

这种方法真的很糟糕。您应该始终调用将打开对话框的函数。另外,您应该使用聚合事件处理程序<例如,代码>点击时

为什么你的代码不再有效?这取决于你是否使用了阴影dom。因为在shadowdom中,有shadowroot,比如说是封闭的,所以
window
object不再有id保存为属性的元素

通常情况下,它是有效的,因为无论何时定义具有某个ID的元素,该元素都会保存在
窗口
对象中,这就是为什么您可以执行

你绝对应该重写你的应用程序,让它使用事件处理函数

编辑:


考虑此功能请求以获得未来可靠的解决方案。

@ballangddang感谢您的编辑和良好链接。我一直在看变更日志,所以我希望很快就能看到这个功能。它确实可以帮助删除许多样板函数
<dom-module id="my-element">
  ...
  <button onclick="dialog.open()">What is Confucianism ?</button>

  <paper-dialog id="dialog" modal>
    <h2>Confucianism</h2>
    <p>...</p>
  </paper-dialog>
  ...
</dom-module>