Синтаксис параметров 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},
});
}