Javascript 将变量从部分模板传递到主模板(播放框架)

Javascript 将变量从部分模板传递到主模板(播放框架),javascript,css,playframework,template-engine,Javascript,Css,Playframework,Template Engine,Hy, 我正在用playframework制作一个应用程序。现在我也遇到了一个问题,我似乎找不到答案 我有一个主模板,它接受以下参数: @(title: String, active: Int)(content: Html)(style: Html)(js: Html) 这样我就可以把所有的样式表放在页面的顶部,把javascripts放在最后(使用变量@style和@js)。 所以我的模板有这样的结构 @(arguments of template...) { <!-- htm

Hy, 我正在用playframework制作一个应用程序。现在我也遇到了一个问题,我似乎找不到答案

我有一个主模板,它接受以下参数:

@(title: String, active: Int)(content: Html)(style: Html)(js: Html)
这样我就可以把所有的样式表放在页面的顶部,把javascripts放在最后(使用变量@style和@js)。 所以我的模板有这样的结构

@(arguments of template...) {
    <!-- html content -->
} { <!-- stylesheets --> } { <!-- javascripts --> }
@(模板的参数…){
} {  } {  }
到目前为止还不错。但是当我有一个单独的模板时,问题就出现了。例如:我有一个可以显示错误消息的小模板。这些错误需要单独的css样式表/Java脚本

@(errorMessage: String) {
    <div class="special-error" onclick="special-error-function">
        @errorMessage
    </div>
}
@(错误消息:字符串){
@错误信息
}
现在我有了一个文件“error.css”和“error.js”。只有在实际发生错误时才应包括这些内容。所以我可以这样称呼它:

@(arguments of template...) {
    <!-- html content -->
    @errorTemplate("This page has an error.")
} { <!-- stylesheets --> } { <!-- javascripts --> }
@(模板的参数…){
@errorTemplate(“此页面有错误。”)
} {  } {  }

关键是,我希望能够(隐式地)将变量@js和@stylesheets传递给errorTemplate,而不是在errorTemplate中编辑这些变量(添加“error.css”和“error.js”)。将它们传递回视图样板。然后像往常一样将它们传递给主模板。

在部分的主模板中

{ <!-- stylesheets --> }
{}
如果必须显示错误消息,可以有条件地添加错误样式表


这与您在模板中应该具有的条件相同,您可以在主模板中添加一个参数,告诉它是否添加错误样式表和脚本。主模板处理条件语句,而其他视图只传递一个true/false

main.scala.html

@(title: String, active: Int, hasErrors: Boolean = false)(content: Html)(style: Html)(js: Html)
<html>
  <head>
    <title>@title</title>
    @style
    @if(hasErrors){<link rel="stylesheet" href="error.css" />}
  </head>
  <body>

    ...

    @js
    @if(hasErrors){<script src="error.js"></script>}

  </body>
</html>
@(标题:String,活动:Int,hasrerrors:Boolean=false)(内容:Html)(样式:Html)(js:Html)
@头衔
@风格
@如果(hasErrors){}
...
@js
@如果(hasErrors){}
其他.scala.html(例如)

@(形式:形式[MyModel])
@主(标题、活动、表单.hasErrors){
...
@if(form.hasErrors){
@errorTemplate(errorMessage)
}
...
} {
} {
}

无法更改模板中参数的值,因为它们属于
val
类型。@genz这是模糊的。内部呈现的错误模板是什么模板?听起来你只是想要一个主模板的变体。。但这很难说。我会更新我的帖子,让它更清楚。这是一个建议。问题是,我希望避免在可能需要errorTemplate的每个模板中编写条件
@(form: Form[MyModel])
@main(title, active, form.hasErrors) {
  ...
  @if(form.hasErrors){
    @errorTemplate(errorMessage)
  }
  ...
} {
  <!-- stylesheets -->
} {
  <!-- javascripts -->
}