Синтаксис параметров Grails RemoteFunction - PullRequest
8 голосов
/ 10 февраля 2010

Я пытаюсь передать несколько параметров удаленной функции в Grails, но я пытаюсь правильно отформатировать ее

Я хочу передать значение части данных на странице плюс значение текстового поля, из которого я только что добавил вкладку, поэтому в моем onblur у меня что-то вроде:

onblur=${remoteFunction(action:'dave',  update:'pack'+it.id,
         params:[denom:document.getElementById(denomValue+${it.id}).value ,
         amount:this.value ])}

Это не компилируется, как и любые перестановки, которые я могу придумать с различным количеством одинарных кавычек и escape-символов.

Я думаю, что меня действительно озадачило то, что я действительно не понимаю, что я пытаюсь здесь создать. Это похоже на использование кода JSP для создания JavaScript, который потом будет выполнен? Когда оценивается это выражение - это когда страница компилируется - или это = во время вызова облура?

Любая помощь с благодарностью.

Ответы [ 5 ]

9 голосов
/ 11 февраля 2010

Похоже, вы перепутали код на стороне сервера с кодом на стороне клиента.

Код Grails будет оцениваться, когда страница «создается» для отправки в браузер клиента.

Код Javascript будет оцениваться после доставки страницы в браузер.

Имея это в виду, давайте посмотрим на ваше задание onblur:

onblur=${remoteFunction(
         action:'dave', 
         update:'pack'+it.id, 
         params: [denom: document.getElementById(denomValue+${it.id}).value, 
                  amount: this.value ])}

Учитывая, что вызов $ {remoteFunction ...} является тегом Grails, он будет оцениваться на сервере, генерировать фиксированную строку, а затем отправляться клиенту. Все внутри звонка должно быть правильным Groovy кодом.

Посмотрите на карту параметров, вы добавили Javascript в значение denom, внутри Код Groovy:

document.getElementById(denomValue

затем вы пытаетесь добавить значение из Groovy

+${it.id}

затем немного Javascript снова

).value

Компилятор Groovy попытается оценить Javascript как код Groovy и потерпит неудачу.

Если вам нужен доступ к параметрам на стороне клиента в Javascript, вам нужно самостоятельно обработать Javascript (и не использовать тег remoteFunction), например, для обработки удаленного вызова:

var path=${createLink(action:'dave',
                      params: [amount:this.value])} 
           + "&denom=" 
           + document.getElementById(denomValue+${it.id}).value

Вам также необходимо самостоятельно обработать удаленный ответ, используя Javascript для обновления элементов pack. Вы всегда можете посмотреть на то, что генерирует вызов remoteFunction, скопировать его на страницу и отредактировать, чтобы сделать то, что вы хотите.

НТН

6 голосов
/ 04 ноября 2010

Или вы можете передать параметры, разделенные '&', как

params:'\'param1=\'+this.value+\'&booleanParam2=true\''

5 голосов
/ 25 апреля 2013

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

var denomValue = document.getElementById(denomValue+${it.id}).value;
onblur=${remoteFunction(
     action:'dave', 
     update:'pack'+it.id, 
     params: '{denom: denomValue, amount: this.value}'
     )}
2 голосов
/ 12 января 2015
<button type="button" class="btn btn-success" id="value-pie" onClick="ajaxFunction(this.value)">Confirmar</button>

<script>
function ajaxFunction(id){
     var obs = $("#observacion").val()
     var parameters = { "serieId":id,
                        "observacion":obs
                      }
     <g:remoteFunction controller="control"
                  action="ajax"
                  method="GET"
                  onSuccess="updateModal(data)"
                  params="parameters"/>
}
</script>
0 голосов
/ 28 ноября 2014

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

<g:select
                                             from="${list}" 
                                      optionKey="value"
                                      optionValue="key"

                                      onchange="getValue(this.value, ${instance.id})"/>

    <script type="text/javascript">     
              function getValue(Id1, Id2)
              {

                  $.ajax({
                      type: 'POST',
                      url: '/app/controller/functionToCall',
                      data: { someId: Id1, otherId:Id2},

                  });

              }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...