我需要输出html,其中值取决于我拥有的对象类型(我在DB表示之间转换)。现在我的逻辑在g:if
个表达式的块中。阅读和调试相对困难。
<g:if test="${o.isKindA}">
<g:set var="x" value="${...}" />
<g:set var="y" value="${...}" />
...
</g:if>
<g:else>
<g:set var="x" value="${...}" />
<g:set var="y" value="${...}" />
...
</g:else>
我特别不有兴趣将这些值X和Y添加为o
的方法。我想做的是使用视图助手设置它们,我理解为grails中的==“tag lib”:
// Tag Helper
//
class AmazingTagLib {
def valueXFor = { attrs -> o.isKindA? 1 : 2 }
...
}
// The previous GSP, rewritten
//
...
<g:set var="x" value="${ valueXFor(o) }" />
然而,这是失败的。当我尝试使用x
时,它被绑定到一个空的StreamCharBuffer,可能是因为我在out
的实现中没有向valueXFor
附加任何内容。它应该有我的助手的整数返回值。
如何在我的视图中使用此类功能辅助方法?
答案 0 :(得分:1)
问题是默认情况下,标记库用于呈现out
。在这种情况下,您希望从方法返回一个对象/值,并且需要告诉TagLib
此方法与标准行为不同。添加以下内容可以解决问题:
class AmazingTagLib {
static returnObjectForTags = ['valueXFor']
def valueXFor = { attrs -> o.isKindA? 1 : 2 }
...
}