比较javascript元素和scala变量的Play framework Twirl模板

比较javascript元素和scala变量的Play framework Twirl模板,javascript,scala,playframework,Javascript,Scala,Playframework,如下面的代码示例所示,我想比较scala helper元素中的javascript元素。但是,即使存在元素“abcde”,它也总是返回false。除了使用标记之外,如何在scala helper元素中获取javascript值 @(appSeq:Seq(String)) <script> var app = 'abcde' @if(appSeq.contains(<script>app</script>)) { alert('true'); } else

如下面的代码示例所示,我想比较scala helper元素中的javascript元素。但是,即使存在元素“abcde”,它也总是返回false。除了使用标记之外,如何在scala helper元素中获取javascript值

@(appSeq:Seq(String))
<script>
var app = 'abcde'
@if(appSeq.contains(<script>app</script>)) {
   alert('true');
} else {
   alert('false');
}
</script>
@(appSeq:Seq(字符串))
var app='abcde'
@if(附件包含(附件)){
警报(“真”);
}否则{
警报(“假”);
}

您的问题不太清楚,但在scala中使用javascript变量是不可能的。视图被编译,然后将一些变量作为结果传递给该视图play/twirl将其呈现为http响应。在这之后,你在前端区域,根本没有scala

因此,最好将您的逻辑移动到前端。如果您只想包含一次检查,那么您可以这样完成它

@(appSeq:Seq[String], app: String)
<script>
var app = "@app"

@if(appSeq.contains(s"<script>$app</script>")) {
alert('true');
} else {
alert('false');
}
</script>
@(appSeq:Seq[String],app:String)
var-app=“@app”
@如果(appSeq.包含(s“$app”)){
警报(“真”);
}否则{
警报(“假”);
}
但若你们想做这个,在前端再次检查。最好将
appSeq
作为javascript数组传递到前端,并在javascript对象上执行javascript包含


这里有一个用js解释的链接。

由于这个原因,这是不可能的:

  • var-app='abcde'
    在JS虚拟机中进行评估
  • XML文本
    app)
    在Java虚拟机中进行计算
因为它们是两个不同的上下文,所以不能共享从JS到Scala的变量。您可以做的是将一个变量从Scala传递到JS,因为Scala代码首先求值,所有值都将在模板中呈现

您需要在Scala XML中硬编码
'abcde'
,或者最好将其分配给Scala值,如:

@(appSeq:Seq(String))
@app="abcde"
<script>
var app = "@app"
@if(appSeq.contains(<script>$app</script>)) {
   alert('true');
} else {
   alert('false');
}
</script>
@(appSeq:Seq(字符串))
@app=“abcde”
var-app=“@app”
@如果(应用程序包含($app)){
警报(“真”);
}否则{
警报(“假”);
}