3

テンプレートではなく、テンプレート内のタグ (関数) のコントローラーから render を呼び出そうとしています。このようにして、ajax 呼び出しからのページの部分的なレンダリングに使用できます。もちろん、フォームのコンポーネントをいくつかのテンプレートに分割してレンダリングを呼び出すこともできますが、他の方法ではよりクリーンになると思います。

私がやろうとしていたことは、次のようなものです:

formpage.scala.htm

@()
<html>
...

@content

...
</html>


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

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

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

@inputText...
...

}

また、別のファイルに分割することなく、コンテンツ機能を ajax render を使用します。このようにして、複数のファイルに断片化することなく、テンプレートの一部をレンダリングできました。

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>

柔軟性の向上

もちろん、これは 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>")
            )
    );
}

(もちろん、これら 2 つをインポートして、動作中のコードを短くすることもでき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 に答える