【问题标题】:remoteFunction call is not working grailsremoteFunction 调用不起作用 grails
【发布时间】:2025-12-19 09:45:07
【问题描述】:

一旦在下拉菜单中做出选择,我就会尝试调用一个函数。这是“代码”域类的 list.gsp 中下拉菜单的代码:

<td><g:select name="data" from="${codeInstance.datas.language}" 
          onchange="${remoteFunction(action: 'translationById')}"/> 
</td>

这是我要调用的函数。这是在我的 CodeController 中:

def translationById = {
        println "Fine"
        //println params;
    }

我只是想打印出“Fine”,所以我知道该函数已被调用,但“Fine”永远不会被打印出来。为什么函数没有被调用?

【问题讨论】:

    标签: grails drop-down-menu grails-controller


    【解决方案1】:

    不要使用闭包,而是使用方法,例如:

    def translationById() {
            println "Fine"
            //println params;
    }
    

    另外,使用一些浏览器调试器,如 firebug 或类似的工具来查看是否显示错误消息。

    如果您在 onchange 事件而不是 remoteFunction 中放置警报会发生什么?如果显示警报,那么我认为您的问题出在原型库上。将原型库添加到您的标题中。喜欢&lt;g:javascript library="prototype" /&gt;

    【讨论】:

    • 我将它从闭包更改为方法,但我没有收到任何错误消息。当我直接在浏览器中访问它时,它会打印出“Fine”,但当我实际更改下拉菜单的选择时却没有
    • 如果在 onchange 事件而不是 remoteFunction 中放置警报会发生什么?如果显示警报,那么我认为您的问题出在原型库上。将原型库添加到您的标题中。像 .
    • 正在显示警报。如果我已经安装了 jQuery 插件,我是否需要原型库,我认为 jquery 插件现在是 grails 使用的默认 javascript 库
    • 如果你有 grails 2.0 或更高版本,那是真的。
    • 不,不是警报(我们知道它正在工作)。将旧的 remoteFunction 代码放回其中并更改您选择的选项。检查它是否会在面板右侧警告您任何错误。
    【解决方案2】:

    语法对我来说很好。尝试确保您的“codeInstance”和“datas”不为空。另外,尝试像这样传递控制器名称:

    remoteFunction(action: 'translationById', controller: 'code')
    

    grails 中的新规范是使用方法而不是闭包:

    def translationById(){
        println "fine"
    }
    

    【讨论】:

    • 我很确定它们不为空,因为我正在使用 codeInstance 的 datas 属性填充下拉框,并且下拉框正在正确填充。我现在也指定了控制器,但它仍然无法正常工作