何时在Grails框架中的标记属性值中使用表达式$ {}?

时间:2015-05-25 01:24:19

标签: grails groovy

我想知道如何知道何时使用表达式$ {}传递属性值,而不是。

例如,在下一个标记调用中,为什么{$ 1}}和template属性值在没有$ {}的情况下传递,但model属性值与$ {}一起传递。

collection

我想学习如何阅读本主题中的grails标签文档。

2 个答案:

答案 0 :(得分:2)

${}仅用于需要评估的表达式,而不用于字符串文字。

<g:render template="displaybook" model="['book':book,'author':author]" collection="${books}" />

&#34; displaybook&#34;是一个文字字符串,而不是变量引用,因此将它放在${}中是没有意义的。

&#34;书籍&#34;是一个变量引用,所以将它放在${}

中是有意义的

传递像['book':book,'author':author]这样的文字集合时会有特殊处理。解析器将识别周围的[...],并将内容评估为表达式,而不是字符串文字,因此${}不是必需的。

我希望有所帮助。

答案 1 :(得分:1)

请参阅,如果如上面的答案所述,您使用$ {}来评估某些内容,例如:“$ {book.author.name.toString()}”,将返回“Stephen King”,但是如果你把它像这样“book.author.name.toString()”,那么它只会给你“book.author.name.toString()”这个结果。另外,符号[something:4,otherSomething:“what up”]与java中的相同:

LinkedTreeMap<String,Object> map = new LinkedTreeMap<String,Object>();
map.put("something",4);
map.put("otherSomething","whats up");

这只是一种非常简单的创建地图的方法,没有所有的投射工作和东西(这是groovy非常酷的原因之一)。

您也可以这样做:

  def map = [:]
  public void getObject(key){
  if(map."${key}")
     println(map."${key}") //this will print the object not the key,  getObject("mobile") would print cellphone not "mobile" understand? That's awsome!
}

这意味着您可以使用变量= D的运行时密钥。

希望我帮助