【问题标题】:Grails remote field - paramName and params togetherGrails 远程字段 - paramName 和 params 一起
【发布时间】:2012-03-21 00:50:44
【问题描述】:

我今天尝试这个时注意到了一些事情:

<g:remoteField action="getReportsToResults" update="reportsToResultsDiv" paramName="search" name="reportsToResults" value="" />

我有这部分代码,其中我的 remoteField 正在更新一个包含选择框的 div。它可以工作,但我想根据域实例属性值(公司 ID)限制传递给 div 的结果。我有实例变量(contactInstance.company)。

当我尝试将参数添加到该代码时,搜索的值变为“+this.value+”,而不是文本字段的实际值。这是怎么发生的?如何同时传递字段值和另一个参数?

<g:remoteField action="getReportsToResults" update="reportsToResultsDiv" paramName="search" params="[company:contactInstance.company]" name="reportsToResults" value="" />

【问题讨论】:

    标签: grails


    【解决方案1】:

    您遇到的错误是因为 remoteFeild 不接受 params 作为其参数,并且当您使用关键字 params 时,它会混淆代码(查看 remotefield 源代码)。如果您需要传递一个参数,我建议将它们放入 Id 并将其传递给您的控制器。

    例如:

      <g:remoteField action="getReportsToResults" update="reportsToResultsDiv" paramName="search" params="[company:contactInstance.company]" name="reportsToResults" value="" id = "123"/>
    

    RemoteField 参数为:

    name (必填) - 字段的名称

    value (可选) - 字段的初始值

    paramName (可选) - 发送到服务器的参数名称

    action (可选) - 链接中使用的动作名称,如果没有指定默认动作将被链接

    controller (optional) - 在链接中使用的控制器的名字,如果没有指定当前控制器将被链接

    id (可选) - 链接中使用的 id

    update(可选)- 包含要为“成功”或“失败”状态更新的元素的映射,或者包含要更新的元素的字符串,其中原因失败事件将被忽略

    before(可选)- 在远程函数调用之前调用的 javascript 函数

    after(可选)- 在远程函数调用之后调用的 javascript 函数

    asynchronous (optional) - 是否异步调用(默认为true)

    method (optional) - 使用执行调用的方法(默认为“post”)

    来自 1.3.7 的源代码

    def remoteField = { attrs, body ->
        def paramName = attrs.paramName ? attrs.remove('paramName') : 'value'
        def value = attrs.remove('value')
        if (!value) value = ''
        out << "<input type=\"text\" name=\"${attrs.remove('name')}\" value=\"${value}\" onkeyup=\""
    
        if (attrs.params) {
            if (attrs.params instanceof Map) {
                attrs.params[paramName] = new JavascriptValue('this.value')
            }
            else {
                attrs.params += "+'${paramName}='+this.value"
            }
        }
        else {
            attrs.params = "'${paramName}='+this.value"
        }
        out << remoteFunction(attrs)
        attrs.remove('params')
        out << "\""
        attrs.remove('url')
        attrs.each { k,v->
            out << " $k=\"$v\""
        }
        out <<" />"
    }
    

    【讨论】:

    • Bizzare,但我通过使用 ID 字段解决了这个问题。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    • 2017-04-02
    • 1970-01-01
    相关资源
    最近更新 更多