Grails - вызов контроллера и рендеринга шаблона из метода Javascript - PullRequest
2 голосов
/ 09 марта 2012

Как мне сопоставить вызовы контроллера Grails из метода Javascript? Я вижу метод, использующий PHP, но не с Grails:

function getSelected(checkList)
        {
            var idList = new Array();
            var loopCounter = 0;
            //find all the checked checkboxes
            jQuery("input[name=" + checkList + "]:checked").each
            (
              function()
              {
                //fill the array with the values
                idList[loopCounter] = jQuery(this).val();
                loopCounter += 1;
              }
            );

            //call here

        }

Редактировать:

${remoteFunction(controller:"person", action:"runThroughAll", params:"[ids:idList]")}

1 Ответ

6 голосов
/ 09 марта 2012

Итак, я чувствую, что здесь есть две вещи, о которых вы спрашиваете. Я собираюсь заняться ими обоими. Во-первых, как правильно настроить URL для вызова контроллера Grails из JavaScript? На моей странице GSP (я делаю это в своем основном макете, но неважно), мне нравится делать этот маленький трюк:

<script>
myapp.url.root = "<g:resource dir='' file='' />" + "/";
</script>

Это даст вам базовый корень вашего приложения, где бы оно ни было развернуто. Затем вы можете создать свои URL в JavaScript:

myurl = myapp.url.root + "путь / к / контроллеру"

Затем выполните вызов jQuery ajax, используя этот URL.

Затем убедитесь, что ваш контроллер настроен для ответа на любой шаблон URL, который вы только что выразили.

Второй вопрос: «Как я могу отправить обратно фрагмент HTML»?

Внутри самого контроллера, возьмите параметры из запроса, используйте его, чтобы выяснить, что вам нужно, затем визуализируйте gsp, передавая созданную вами модель. Это будет выглядеть примерно так:

def show() {
   def data = [hypothesis : metadataService.getHypothesis(params.id) as JSON]
   render(view:"create", model:data)
}

Затем в jQuery ваш обработчик успеха получит в качестве аргумента возвращенный ответ, который вы затем сможете проверить / обработать / добавить в dom.

Надеюсь, все это имело смысл. Если я замутил что-то или не ответил на вопрос, который вы задавали, дайте мне знать.

РЕДАКТИРОВАТЬ: Для дальнейшего использования, вот переписанный метод javascript, который мы получили в чате:

function getSelected(checkList){ 
var idList = $("input[name='" + checkList + "']:checked").map(function(){ return $(this).val(); }); 

$.ajax({ 
url: "/path/to/controller", 
type:"POST", 
data:{ids:JSON.stringify(idList)} 
success:mySuccessFunction 
}); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...