grails ajax功能 - 一个“讨厌的bug”

时间:2011-11-15 05:45:58

标签: javascript grails

如何使用remoteLink或remoteFunction调用操作,然后使用该操作在JavaScript函数中生成/返回的内容?只要我在JavaScript函数中放入一个参数来调用动作完成,就不再调用该函数,例如:

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

    after: 'processAfter(e)'

然后,根本不再调用Javascript函数。 Fyi:整行代码是:

<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)')}"/> 

如果我从Javascript函数名中删除参数“e”,即:

 onComplete: 'processUpdate();'

然后它调用该函数。如果我声明函数:

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

它会调用该函数,但会通过以下方式提醒我:

     processUpdate: undefined

那么,使用Grails的人如何将操作产生的结果输入到Javascript函数中,然后可以使用该函数?

1 个答案:

答案 0 :(得分:1)

xml-parsing机制中存在一个非常烦人的错误:只要在包含双引号的grails-tag中定义属性,并且标记本身使用双引号,就会忽略完整的属性定义。您的提醒使用双引号。试试:

<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)')}"/>
无论AJAX调用是否正常(成功和失败),都会调用

onComplete。如果要在成功案例中访问结果,请使用带参数onSuccess的{​​{1}}:

data