HTMX и GO, не могут отправлять данные с помощью запроса GET из таблицы HTML

Я пытаюсь отправить некоторые данные с помощью запроса GET из HTML-таблицы. Просто вот так:

templ ProjectMatchTable(matches []model.Match) {
    <table class = "striped">
        <thead>
            <tr>
            <th scope = "col"></th>
            <th scope = "col">Name</th>
            <th scope = "col">Match %</th>
            <th scope = "col">Verfügbarkeit %</th>
            <th scope = "col">Verfügbarkeit Engpass</th>
            </tr>
        </thead>
        <tbody>
            for _, match := range matches {
                <tr>
                <th scope = "row">
                    <div>
                    <input name = "employeeNumber" type = "hidden" value = {match.Name} />
                    <button hx-get = "/showExternalProfile" hx-target = "#externalProfile" hx-params = "*" hx-include = "[employeeNumber='employeeNumber']">Anzeigen</button>
                    </div>
                </th>
                <td>{ match.Name }</td>
                <td>{ strconv.Itoa(match.Score) } %</td>
                <td>{ strconv.Itoa(match.Availability) } %</td>
                <td>{ match.AvailabilityConcerns }</td>
                </tr>
            }
        </tbody>
    </table>
}

Но на сервере я не вижу параметра, который следует отправить вместе с hx-get. Я также пробовал несколько способов hx-get = "/showExternalProfile/employeeNumber = {match.Name}, но в этом случае HTMX отправляется {match.Name} как строковое значение.

На сервере (GO) я сейчас использую этот тестовый код:

func showExternalProfile(w http.ResponseWriter, r *http.Request) {
    employeeNumber := r.URL.Query().Get("employeeNumber")
    fmt.Println(employeeNumber)
    templ.Handler(external_profile.ExternalProfile()).ServeHTTP(w, r)
}

Например, match.Name содержит значение «Макс Мустерманн». Который правильно загружается в HTML-таблицу. Если я жестко запрограммирую hx-get = "/showExternalProfile?employeeNumber=123", это тоже работает.

В документации HTMX я вижу множество примеров, которые делают то же самое. Но это просто не работает. Что мне не хватает?

это видео сражается через htmx и golang youtube.com/watch?v=uiXVDbRCj5Q

Scott Stensland 28.05.2024 14:22
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
1
1
109
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку здесь вы работаете с таблицами. К сожалению, таблицы очень требовательны к элементам внутри них. И текущая реализация hx-include="[employeeNumber='employeeNumber']" неверна, поскольку селектор внутри hx-include неточен. Вам необходимо обратиться к правильному селектору для скрытого поля ввода.

Вы можете изменить свой код, чтобы использовать hx-include с более точным селектором.

<tbody>
            {{ range .Matches }}
            <tr>
                <th scope = "row">
                    <div>
                        <input name = "employeeNumber" type = "hidden" value = "{{ .Name }}" />
                        <button hx-get = "/showExternalProfile" hx-target = "#externalProfile" hx-include = "closest tr">Anzeigen</button>
                    </div>
                </th>
                <td>{{ .Name }}</td>
                <td>{{ .Score }} %</td>
                <td>{{ .Availability }} %</td>
                <td>{{ .AvailabilityConcerns }}</td>
            </tr>
            {{ end }}
        </tbody>

идти сервер:

func showExternalProfile(w http.ResponseWriter, r *http.Request) {
employeeNumber := r.URL.Query().Get("employeeNumber")
fmt.Println(employeeNumber)
// Your templating handler here
templ.Handler(external_profile.ExternalProfile()).ServeHTTP(w, r)} 

я надеюсь, что это сработает !!

Однако это не объясняет, почему это работает. Почему селектор «ближайший tr» может быть решением? Stack Overflow предназначен для решений, которые принесут пользу и другим людям. Этот ответ в том виде, в котором он написан, в значительной степени предназначен просто для того, чтобы решить чью-то проблему.

Gimby 29.05.2024 12:03

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