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

Assigning a custom URL mapping to a JavaScript variable

本文关键字:JavaScript 变量 分配 映射 自定义 URL      更新时间:2023-09-26

我为我的一个页面创建了一个URL自定义控制器:

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}]的URL。参数[param1]是必需的,但未指定!

尽管以下代码在<body>中编写时有效:

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

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

您传递的是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: '...']"
)