我已经定义了这样的taglib:
class FooTagLib {
static namespace = "foo"
def bar = { attrs, body ->
out << render(template: "/taglib/foo/bar", model: [body: body])
}
}
body关闭有两个参数,baz和qux,为什么我不能在/taglib/foo/_bar.gsp中执行此操作:
${body(baz: 'Hello', qux: 'world!')}
这是我在gsp视图中使用此标记的方式:
<foo:bar>
${baz} ${qux}
</foo:bar
它打印正文的内容,但参数都是null
:
null null
这是一个错误还是我做错了什么?
答案 0 :(得分:1)
在taglib中你从不指定任何参数,它不会自动完成,因为taglib不知道地图键的名称。您必须在模型中指定地图键和值。
class FooTagLib {
static namespace = "foo"
def bar = { attrs, body ->
def s = body()
def tokens = s.tokenize()
out << render(template: "/taglib/foo/bar", model: [body: [baz:tokens[0], qux:tokens[1]] ])
}
}
也许身体标记化并不是你应该做的事情,但这只是为了让事情变得清晰。
您可以更轻松地使用attrs
,而不是使用参数构建主体闭包。