为什么在g:select选项值中要使用闭包

3

我可以理解什么是闭包。我可以理解下面的例子。

    def list = ['a','b','c','d']
    def newList = []

    def clos = { it.toUpperCase() }
    list.collect( newList, clos )

assert newList == ["A", "B", "C", "D"]  

我去看了g:select的文档,发现如下内容。

 <g:select optionKey="id" optionValue="${{it.title?.toUpperCase()}}" name="book.title" from="${bookList}" />

我不理解 ${{it.title?.toUpperCase()}} 的含义。

我理解每个对象的标题都会转换成大写的逻辑,但为什么我们需要双重“{}”..

为什么 ${it.title?.toUpperCase()} 不起作用

文档链接 点击此处查看

1个回答

5

外层的 ${ } 不是一个闭包,而是一个GSP表达式,只有内部的 {} 才是一个闭包。如果你仅输入 ${it.title?.toUpperCase()},则不会传递参数给闭包,而是传递“it.title?.toUpperCase()”这个值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接