3

我正在尝试从控制器为模板而不是模板内的标签(函数)调用渲染。这样我就可以将它用于 ajax 调用的页面的部分渲染。当然,我可以将表单的组件分成几个模板,然后在这些模板上调用渲染,但我认为换一种方式会更干净。

我试图做的是如下:

formpage.scala.htm

@()
<html>
...

@content

...
</html>


@**********************************
* Helper generating form *
***********************************@
@content() = {

<h3 class="form-heading">@Messages("employees")</h3>

@form(routes.AppController.save()) {    

@inputText...
...

}

并且使用 ajax 渲染内容功能,无需将其分离到单独的文件中。这样我就可以渲染模板的某些部分,而无需将其分割成多个文件。

4

1 回答 1

3

事实上,标签只是较小的模板,因此您可以同时使用标签 - 在模板和控制器中使用,最简单的示例:

/app/views/tags/mytag.scala.html

This is my tag...

在控制器中可以呈现为:

public static Result createFromTag(){
    return ok(views.html.tags.mytag.render());
}

在其他模板中,您只需插入:

....
And there is my tag rendered
<b>@tags.mytag()</b>

更大的灵活性

当然,由于它也是模板ergo Scala 函数,您可以将一些参数传递给它甚至 Html 正文:

/app/views/tags/othertag.scala.html

@(headline: String)(body: Html)

<h3>@headline</h3>
<div class="tagsBody">
    @body
</div>

在控制器中可以呈现为:

public static Result createFromTag(){

    return ok(
            views.html.tags.othertag.render(
                    "Head from controller",
                    new play.api.templates.Html("This code becomes from <i>controller</b>")
            )
    );
}

(当然,您可以导入这两个以获得更短的代码,import play.api.templates.Html;并且import views.html.tags.othertag

最后在您的模板中,您可以将标签用作:

And there is my tag rendered <br/>
@tags.othertag("Head from template"){
    some content for the tag's body from <b>The Template!</b>
}

最后。

您将在文档中找到标签描述。

于 2012-06-22T15:22:30.090 回答