GSP中的Grails remoteFunction AJAX函数,访问用于params的变量

时间:2013-01-16 16:19:37

标签: ajax grails grails-2.0

我希望在复选框内的 remoteFunction 中动态设置参数。我尝试了很多不同的组合,我将在下面展示几个,但我只是收到如下的错误......

所以基本上我的理论,在这个方法的范围内并不知道eventInstance是什么

FireBug错误控制台中,我收到ReferenceError: eventInstance is not defined

Test Combination 1
<g:checkBox name='completed' value="${eventInstance.completed}"
    onclick="${remoteFunction(action:'update', id:eventInstance.id, params:'\'id=\' + eventInstance.id+\'&version=\' + eventInstance.version' , onComplete: "tester()" )}" />


Test Combination 2 
<g:checkBox name='completed' value="${eventInstance.completed}" evt="${eventInstance}"
    onclick="${remoteFunction(action:'update', id:eventInstance.id, params:"[version=evt.version, editType='occurrence', title=evt.title, startTime=start, endTime=end, isRecurring=evt.isRecurring, completed='true']", onComplete: "tester()" )}" /> 

如果手动输入即硬编码数据,这是有效的,但这是没用的。愚蠢的东西,我找不到答案:(

3 个答案:

答案 0 :(得分:1)

确定这个有用...看起来有点奇怪,你不能使用grails变量,即从控制器发送以在GSP中使用

相反......你必须将变量保存到JavaScript变量中。

因此,对于我想在eventInstance中使用的params中使用的每个变量,即id,version,我在其中包含的任何其他字段只执行以下操作:

<script type="text/javascript">
    function tester() {
        $('#calendar').fullCalendar('refetchEvents');
    }

    var test0 = ${eventInstance.id};
    var test1 = ${eventInstance.version};
    var test3 ='${eventInstance.title}';
    var test4 = '${start}';
    var test5 = '${end}';
    var test6 = ${eventInstance.isRecurring};
    alert(test0 + test1 + test3 + test4 + test5 + test5 + 
</script>

然后在remoteFunction的params部分引用了这些变量,如下所示:

<g:checkBox name='completed' value="${eventInstance.completed}"
onclick="${remoteFunction(action:'update', id:eventInstance.id, params:'\'id=\' + test0+\'&version=\' + test1+\'&editType=\'+"occurrence"', onComplete: "tester()" )}" />

不确定这是某种错误还是我的方法中的错误,但是我已经尝试了所有单一组合,似乎唯一可以解决的解决方案

答案 1 :(得分:1)

这可以帮到你,

onchange="${remoteFunction(asynchronous: false, controller: 'mycontroller', action: 'remoteMethod', params: '\'p1='+params?.p1+'&p2=less&p3=\'+ this.value', update: 'remoteDiv')}" 

试试这个。

答案 2 :(得分:0)

这可以帮到你,

    onchange="$
    {
         remoteFunction(asynchronous: false, 
              controller: 'mycontroller', 
              action: 'remoteMethod', 
              params: '\'p1='+params?.p1+'&p2=less&p3=\'+ this.value', update: 'remoteDiv')}" 

试试这个。