如下面的代码示例所示,我想比较一个scala帮助元素中的javascript元素。但是,即使存在元素“abcde”,它也始终返回false。除了使用标签之外,如何在scala助手元素中获取javascript值?
@(appSeq:Seq(String))
<script>
var app = 'abcde'
@if(appSeq.contains(<script>app</script>)) {
alert('true');
} else {
alert('false');
}
</script>
答案 0 :(得分:3)
这是不可能的:
var app = 'abcde'
在JS VM中进行评估<script>app</script>)
因此,由于它们是两个不同的上下文,因此您无法共享从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>
答案 1 :(得分:0)
你的问题不是很清楚,但在scala中使用javascript变量是不可能的。视图已编译,然后您将一些变量传递给此视图,因此播放/旋转将其呈现为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
作为javascript数组传递到前端,并将javascript包含在javascript对象上。
这是在js中解释contain for array的链接。