Функциональность Grails Ajax - «досадная ошибка» - PullRequest
0 голосов
/ 15 ноября 2011

Как можно использовать remoteLink или remoteFunction для вызова действия, а затем использовать то, что это действие производит / возвращает внутри функции JavaScript?Как только я помещаю параметр в функцию JavaScript для вызова при завершении действия, функция больше не вызывается, например:

    onComplete: 'processUpdate(e);'    --or--

    after: 'processAfter(e)'

, тогда функция Javascript больше не вызывается вообще,К сведению: вся строка кода:

<g:select name="week" from="${strategyInstance.constraints.week.inList}" value="${strategyInstance?.week}" valueMessagePrefix="strategy.week" noSelection="['': '']"
   onchange="${remoteFunction(action: 'produceUpdate', params: '\'update=\' + this.value', onComplete:'processUpdate(e);', before:  'alert("doing before")', after: 'processAfter(e)')}"/> 

Если я удаляю параметр "e" из имени функции Javascript, то есть:

 onComplete: 'processUpdate();'

, тогда он вызывает функцию.Если я объявляю функцию:

  function processUpdate(e) {
   alert('processUpdate: ' +e)
  }

, она вызывает функцию, но предупреждает меня:

     processUpdate: undefined

Итак, как можно с Grails получить результаты, полученные действиями, в функцию Javascriptтогда можно работать на / с?

1 Ответ

1 голос
/ 15 ноября 2011

Существует очень досадная ошибка в механизме парсинга xml: как только вы определяете атрибут внутри тега grails, который содержит двойные кавычки, а сам тег использует двойные кавычки, полное определение атрибута игнорируется.Ваше предупреждение использует двойные кавычки.Попробуйте:

<g:select name="week" from="${strategyInstance.constraints.week.inList}" 
  value="${strategyInstance?.week}" 
  valueMessagePrefix="strategy.week" 
  noSelection="['': '']"
  onchange="${remoteFunction(
      action: 'produceUpdate', 
      params: '\'update=\' + this.value', 
      onComplete:'processUpdate(e);', 
      before:  'alert(\'doing before\')', 
      after: 'processAfter(e)')}"/>

onComplete вызывается независимо от того, в порядке ли вызов AJAX или нет (таким образом, успех и неудача).Если вы хотите получить доступ к результату в случае успеха, используйте onSuccess с параметром data:

<g:select name="week" from="${strategyInstance.constraints.week.inList}" 
  value="${strategyInstance?.week}" 
  valueMessagePrefix="strategy.week" 
  noSelection="['': '']"
  onchange="${remoteFunction(
      action: 'produceUpdate', 
      params: '\'update=\' + this.value', 
      onSuccess: 'processUpdate(data);', 
      before:  'alert(\'doing before\')', 
      after: 'processAfter(e)')}"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...