【发布时间】:2021-12-11 16:19:30
【问题描述】:
嵌入在 HTML 脚本中的 ES6 模块中定义的函数对该脚本不可用。因此,如果您有如下声明:
<button onclick="doSomething();">Do something</button>
在您的 HTML 中,并且您的 doSomething() 函数位于嵌入在 HTML 脚本中的 ES6 模块中,当您运行该脚本时,您将收到“doSomething() is undefined”错误。
Use functions defined in ES6 module directly in html 为当前问题提出了一个很好的解决方案,建议您通过修改 HTML 将您的功能“绑定”到按钮:
<button id="dosomethingbutton">Do something</button>
并使用模块本身来创建链接:
document.getElementById('dosomethingbutton').addEventListener('click', doSomething);
这很好用,但是如果您的原始按钮更复杂一些并且被参数化了怎么办?例如:
<button onclick="doSomething('withThisString');">Do Something with String</button>
“绑定”所能提供的最大功能似乎仅限于与事件相关的情况——我找不到将它与数据相关联的方法。我完全被困在试图找到解决方案的过程中,我们将不胜感激。
我想补充一点,虽然这个问题可能看起来有点晦涩难懂,但我认为任何迁移到 Firebase 9 的人都会对此感兴趣。在其他更改中,迁移要求您将 javascript 代码移动到 ES6 模块中(其中命名空间不能直接用于 HTML DOM),因此最简单的 HTML 很可能会立即遇到这些问题。欢迎提供建议。
【问题讨论】:
标签: javascript html firebase ecmascript-6