Передать функцию Go в ответ html/js на кнопку "onclick"
Я использую пакет Go "net/http" для передачи данных между html и бэкэндом в Go. Например, мы можем использовать местоположение изображения следующим образом:
<img src={{.MyPicture}} width=200 height=auto/>
Мы можем сделать то же самое, чтобы передать функции в html и вызвать их:
{{if .MyBool}}
{{.MyFunction}}
{{end}}
Теперь мой вопрос: как мне установить реакцию кнопки для вызова моей функции? Я ожидаю, что это сработает, но это не так:
<button onclick={{.ShowMoreLinks}}>Show more!</button>
Я получаю "[js] декларацию или ожидаемое заявление". Я попытался обернуть его в скрипт (как встроенный, так и в заголовок), но ни один из них, кажется, не работает. JS не может обработать переданную переменную.
1 ответ
На самом деле, вы используете механизм шаблонов Go для подготовки HTML, который вы отправляете в браузер. Это только заполняет заполнители и в конечном итоге создает только строку (в данном случае HTML), которая будет отправлена по сети в браузер для интерпретации. Это браузер, который может взаимодействовать с пользователем только через такие события, как "onclick". Кроме того, эти события должны быть кодом Javascript, таким как выражение JS или вызов функции:
onclick="jsFunction()"
Вы можете сделать так, чтобы ваш шаблон Go предоставлял функцию для вызова в качестве заполнителя:
onclick="{{.JSFuncCall}}"
Здесь ".JSFuncCall" должен был бы оценить какое-нибудь имя функции JS (и скобки, чтобы сделать вызов), которое вы должны были определить в своем коде JS на стороне клиента. Эта функция Javascript могла бы затем выполнить XHR-вызов к серверу по какому-то конкретному URL, который запускает обработчик Go, запускает код Go, который вы хотите запустить, и затем возвращает ответ, который затем можно обработать обратно в функции JS.