0

次のように taglib を定義しました。

class FooTagLib {
    static namespace = "foo"

    def bar = { attrs, body ->
        out << render(template: "/taglib/foo/bar", model: [body: body])
    }
}

body クロージャーは baz と qux の 2 つのパラメーターを取ります。/taglib/foo/_bar.gsp でこれを実行できないのはなぜですか。

${body(baz: 'Hello', qux: 'world!')}

?

これは、gsp ビューでこのタグを使用する方法です。

<foo:bar>
    ${baz} ${qux}
</foo:bar

本文の内容を出力しますが、パラメーターはすべてnull次のとおりです。

null null

これはバグですか、それとも何か間違っていますか?

4

1 に答える 1

1

taglib内では、paramsを指定することはありません。これは、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]] ])
    }
}

ボディトークン化は実際にはあなたがすべきことではないかもしれませんが、それは単に物事を明確にするためでした。

attrsparamsを使用してボディクロージャーを作成するよりも、を使用する方が簡単です。

于 2012-10-21T23:40:47.863 に答える