Передать функцию 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.

Другие вопросы по тегам