我正在使用Play应用程序,需要在调用控制器操作的混合Scala-HTML视图中生成链接。几年前我发现this问题与我的情况类似,但提供的答案对我不起作用。
元素是在循环中生成的,所以我不能手动将参数插入到控制器动作中,但我尝试过的任何东西都没有用。这就是我现在的路线:
<a href='@routes.Application.show("some")'>My link with some string</a>
我之前链接的问题的接受答案也有效地使用了这种结构:
data.$ set -- $(date "+%Y %m %d %T")
data.$ echo $*
2015 04 26 19:32:55
data.$ DATE_TIME="$1-$2-$3_$4"
data.$ echo $DATE_TIME
2015-04-26_19:32:55
data.$ DATE_TIME_1="$1.$2.$3, $4"
data.$ echo $DATE_TIME_1
2015.04.26, 19:32:55
data.$
我的问题有两个:
1)如何将变量fhirID传递给控制器动作?我生成的链接只有文本“fhirID”而不是语句第一部分生成的文本。
2)@ routes.Users语法是否正确?当我点击生成的链接时,它会尝试在/myapp/@routes.Users.fhirUserDetails(fhirID)上呈现页面
我意识到我可能在这里遗漏了一些非常基本的东西 - 感谢任何建议!
答案 0 :(得分:2)
问题似乎不是@routes
语法(你完全正确),而是一个Twirl引擎没有看到代码结束和HTML开始的情况(或者类似的东西......)< / p>
你所包含的行,包含var
和分号,让我怀疑这一点,并且当我使用这种风格时我能够重现这个问题。
我的建议是使用@defining
helper而不是var
来获取用于链接的范围变量,如下所示:
ID: @defining(<processing for ID>) { fhirID =>
<a href='@routes.Users.fhirUserDetails(fhirID)'>fhirID</a>
}
如果需要,您可以根据需要嵌套@defining
块,但如果有很多逻辑,可能最好调用可重用块。我认为这种风格使得更易读的模板,并且看起来更像是“真正的Scala”: - )