Grails远程字段 - paramName和params在一起

时间:2012-03-20 12:41:19

标签: grails

我今天尝试这件事时发现了一些事情:

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

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

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

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

1 个答案:

答案 0 :(得分:0)

你得到的错误是因为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(可选) - 链接中使用的控制器名称,如果未指定,则将链接当前控制器

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

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

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

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

asynchronous(可选) - 是否异步执行调用(默认为true)

方法(可选) - 使用执行调用的方法(默认为“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 <<" />"
}