Grails 3.3.9: Действие контроллера вызова при установленном флажке - PullRequest
0 голосов
/ 08 января 2019

Я довольно новичок в Grails и фреймворках в целом, так что это, скорее всего, очень простая проблема. Единственными многообещающими решениями, которые мне удалось найти, была работа с тегом, который, по-видимому, устарел в Grails 3. Подобные вопросы существуют, но все время, когда они еще были.

Я пытаюсь запрограммировать способ отображения товаров, сгруппированных по подкатегориям, которые затем группируются по категориям. Когда моя страница загружается, из моей базы данных запрашиваются подкатегории и категории, и в представлении отображаются параметры выбора (тег выбора и флажки).

Когда отмечен один из флажков, представляющих подкатегории, мне нужно выполнить запрос к базе данных, чтобы получить информацию о продукте и обновить HTML-элемент, отобразив шаблон для каждой строки, которую я получаю. У меня есть действие контроллера, который делает все это. Моя единственная проблема заключается в том, что мне нужен способ вызывать действие контроллера всякий раз, когда установлен один из флажков.

Возможно, я мог бы обойти это, используя actionSubmit и скрытую кнопку отправки, которая нажимается javascript всякий раз, когда установлен флажок, но это не похоже на правильное решение.

Возможно, мне здесь не хватает некоторых базовых функций, но я уже провел тщательный поиск и не нашел подходящего решения, вероятно, потому, что не использовал правильные условия поиска. Я был бы так счастлив, если бы кто-нибудь мог мне помочь с этим. Большое спасибо уже!

1 Ответ

0 голосов
/ 08 января 2019

В следующем примере используется функция javascript, активированная в ответ на отмеченный / снятый флажок, значение которого передается действию, из которого вы можете делать все, что угодно со значением флажка, выполнять запрос и т. Д. В настоящее время действие отображает шаблон для обновления представления с результатами базы данных.

index.gsp

<!DOCTYPE html>
<html>
<head>
    <meta name="layout" content="main" />

    <script type="text/javascript">
        $(document).ready(function(){
            $( '#cb' ).click( function() {
                var checked = $(this).is(":checked");
                $.ajax( {
                    url: "/yourController/yourAction?checked=" + checked,
                    type: "get",
                    success: function ( data ) {
                        $( '#resultDiv' ).html( data )
                    },
                    error: function(jqXHR, textStatus, errorThrown) {
                        console.log( 'Error rendering template ' + errorThrown )
                    }
                } );
            })

        });
    </script>
</head>
<body>

<div id="resultDiv"></div>

<g:form>
    <g:checkBox name="cb" />
</g:form>

</body>

ВашКонтроллер

class YourController {

    def yourAction() {
        // you may want to do something with the value of params.checked here?
        def dbResults = YourDomain.getStuff()
        render ( template: 'theTemp', model: [dbResults: dbResults] )
    }
}

_theTemp.gsp

<table>
    <caption>Table of stuff</caption>
    <g:each in="${dbResults}" var="aThing">
        <tr>
            <td>${aThing}</td>
        </tr>
    </g:each>
</table>
...