将自定义URL映射分配给JavaScript变量

时间:2016-03-23 12:09:56

标签: javascript grails

我为其中一个网页创建了一个网址自定义控制器:

class SummaryController {
    def show(String param1, String params2) {
        ...
    }

    ...
}

以及相应的URL映射。

class UrlMappings {
    static mappings = {
        ...
        name special:"/dir1/subdir/$param1/$param2/summary"{
            controller="summary"
            action="show"
        }
        ...
    }
}

当我在浏览器的地址栏中输入地址时,它工作得很好。现在我想要的是将该URL保存到javascript变量中。但是在创建URL字符串时会产生错误:

<script>
    var URL =
        "${ g.createLink(mapping: "special", params: "[param1: '...', param2: '...']") }"
</script>
  

消息:无法为映射[/dir1/subdir/(*)/(*)]和参数[{controller=summary, action=show}]创建网址。参数[param1]是必需的,但未指定!

虽然以下代码(用<body>编写时)有效:

<body>
    ....
    <li>
        <g:link mapping="special" params="[param1: '...', params2: '...']" />
            Link
        </g:link>
    </li>
    ..
</body>

g:link无关的g.createLink()是什么?有没有办法将自定义URL值分配给JavaScript变量?这是Grails 2.4.4。

1 个答案:

答案 0 :(得分:3)

您正在传递String参数,而不是Map。请记住,${}内部应该是有效的Groovy代码,与在groovy类中使用的代码相同。

试试这个:

<script>
    var URL =
        "${ g.createLink(mapping: 'special', params: [param1: '...', param2: '...']) }";
</script>

类似于:

def g = ...
g.createLink(
    mapping: 'special', 
    params: [
       param1: '...', 
       param2: '...'
    ]
)
// your code was passing a string instead:
g.createLink(
    mapping: 'special', 
    params: "[param1: '...', param2: '...']"
)
相关问题