0

我已经定义了一个这样的标签库:

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

这是一个错误还是我做错了什么?

4

1 回答 1

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]] ])
    }
}

也许 body-tokenize 并不是你真正应该做的,但它只是为了让事情变得清晰。

使用它会更容易attrs,而不是使用参数构建主体闭包。

于 2012-10-21T23:40:47.863 回答