Синтаксис параметров RemoteFunction Grails

Я пытаюсь передать пару параметров в remoteFunction в grails, но я изо всех сил пытаюсь отформатировать его правильно

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

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

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

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

любая помощь очень ценится.

5 ответов


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

код 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-кодом.

посмотрите на карту params, вы добавили 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, скопировать его на страницу и отредактировать, чтобы сделать то, что вы хотите.

HTH


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

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


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

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

<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>

У меня была та же проблема, но все ответы выше не помогли, так как значение, которое я хочу получить, - это выбранное значение из раскрывающегося списка выбора, а также экземпляр 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},

                  });

              }