Grails/AJAX: Актуализиране на произволен регион в страницата с помощта на g:submitToRemote

В GSP (сървърна страница Groovy) използвам <g:submitToRemote update="..."> за актуализиране на <div> след повикването от страна на сървъра.

Според документацията на маркера и други източници в мрежата целта <div> може да бъде поставена произволно на страницата. При моите тестове обаче установих, че <div> трябва да заобиколи етикета <g:submitToRemote>.

Ако не, <div> ще бъде актуализиран с някакво „произволно“ съдържание (т.е. части от формуляра, които обграждат маркера <g:submitToRemote>).

Помислете за следния GSP код:

<html>
<head>
    <g:javascript library="prototype" />
</head>
<body>

<div id="updateMe_NOT_WORKING">${message}</div>

<g:form>
    <div id="updateMe_WORKING">
        <g:submitToRemote value="Click Me"
            action="someAction" update="updateMe_NOT_WORKING" />
    </div>
</g:form>

</body>
</html>

Това е на Grails 1.3.4.
Какво пропускам? - Благодаря


person robbbert    schedule 24.10.2010    source източник


Отговори (2)


Според моите тестове атрибутът action на g:submitToRemote не трябва да не сочи към текущото действие на текущия контролер (тъй като това ще вмъкне/дуплира текущия изглед в текущия изглед).

Работи, ако зададете алтернативно действие в g:submitToRemote - т.е.

<g:submitToRemote value="Click Me"
    action="ajaxAction" update="updateMe" />

Ако това действие предоставя модел - т.е.

def ajaxAction = { [message: 'foo'] }

тогава трябва да има съответна GSP - която в този случай трябва да гласи,

$message

Алтернативно, действието може да използва метода render - като това,

def ajaxAction = { render 'foo' }

Ще оставя този проблем отворен за известно време, в случай че може да има допълнителни отговори, и ако няма, ще приема този отговор като решение.

Благодаря

person robbbert    schedule 01.12.2010

Мисля, че проблемът е, че не посочвате контролера за вашето действие. Опитайте да добавите controller="..." във вашия етикет g:submitToRemote. Или поне го посочете в g:form.

Сигурен съм, че <div> не трябва да се опакова.

person Hoàng Long    schedule 01.12.2010
comment
Благодаря за отговора [+]. - Това ме накара да погледна по-дълбоко в проблема. - Атрибутът controller всъщност не прави разлика, но това е атрибутът action (който трябва да препраща към действие, което не е текущото, плюс някои включени допълнителни условия). - person robbbert; 01.12.2010
comment
Да, това е често срещан проблем за разработчиците, които не са запознати с MVC в Grails. Имах проблеми с него доста време. - person Hoàng Long; 02.12.2010