将 Go 函数传递给 html/js 按钮 "onclick" 响应

Pass Go function to html/js button "onclick" response

我正在使用 Go 的 "net/http" 包在 html 和 Go 后端之间传递数据。例如,我们可以像这样使用图像的位置:

<img src={{.MyPicture}} width=200 height=auto/>

我们可以做同样的事情,将函数传递给 html 并调用它们:

{{if .MyBool}}
    {{.MyFunction}}
{{end}}

现在我的问题是:如何设置按钮的响应以调用我的函数?我希望这会起作用,但它不起作用:

<button onclick={{.ShowMoreLinks}}>Show more!</button>

我收到“需要 [js] 声明或声明。”我试过将它包装在脚本中(内联和 header),但这些似乎都不起作用。 JS无法处理传入的变量

实际上,您正在使用 Go 的模板机制来准备您发送给浏览器的 HTML。这只会填充占位符,最终只会生成一个字符串(在本例中为 HTML),该字符串将通过网络发送到浏览器进行解释。浏览器只能通过 "onclick" 等事件处理与用户的交互。此外,这些事件必须是 Javascript 代码,例如 JS 表达式或函数调用:

onclick="jsFunction()"

您可以让您的 Go 模板提供要在占位符中调用的函数:

onclick="{{.JSFuncCall}}"

此处“.JSFuncCall”必须计算出您必须在 JS 客户端代码中定义的某些 JS 函数名称(以及进行调用的括号)。然后 Javascript 函数可以在某个特定的 URL 处对服务器进行 XHR 调用,触发 Go 处理程序,运行 是你想要 运行 的 Go 代码,然后returns 然后您可以在 JS 函数中处理的响应。