为 Play Framework 2.3 中的控制器操作生成 link
Generating a link to a controller action in Play Framework 2.3
我正在开发一个 Play 应用程序,需要在调用控制器操作的混合 Scala-HTML 视图中生成 links。我发现 this 几年前的问题与我的情况相似,但提供的答案对我不起作用。
这些元素是在循环中生成的,因此我无法手动将参数插入到控制器操作中,但我尝试过的任何操作都没有奏效。这是我现在的行:
ID: @{var fhirID = <processing for ID>; <a href='@routes.Users.fhirUserDetails(fhirID)'>fhirID</a>}
我之前 link 编辑的问题的公认答案也有效地使用了这个结构:
<a href='@routes.Application.show("some")'>My link with some string</a>
我的问题是双重的:
1) 如何将变量 fhirID 传递给控制器操作?我生成的 link 仅包含文本 "fhirID" 而不是语句第一部分生成的内容。
2) @routes.Users 语法是否正确?当我单击生成的 link 时,它实际上会尝试在 /myapp/@routes.Users.fhirUserDetails(fhirID)
呈现页面
我意识到我可能遗漏了一些非常基本的东西 - 感谢您的任何建议!
问题似乎不是 @routes
语法(您完全正确),而是 Twirl 引擎看不到代码在哪里结束和 HTML 开始(或类似的东西)的情况无论如何...)
你包含的那一行,它有一个 var
和一个分号,这让我怀疑这一点,而且当我使用这种风格时我已经能够重现这个问题。
我的建议是使用 @defining
helper 而不是 var
来获取在您的链接中使用的范围变量,如下所示:
ID: @defining(<processing for ID>) { fhirID =>
<a href='@routes.Users.fhirUserDetails(fhirID)'>fhirID</a>
}
您可以根据需要尽可能深地嵌套 @defining
块,但如果有很多逻辑,调用可重用块可能会更好。我认为这种风格使模板更具可读性,而且在某种程度上看起来更像 "real Scala" :-)
我正在开发一个 Play 应用程序,需要在调用控制器操作的混合 Scala-HTML 视图中生成 links。我发现 this 几年前的问题与我的情况相似,但提供的答案对我不起作用。
这些元素是在循环中生成的,因此我无法手动将参数插入到控制器操作中,但我尝试过的任何操作都没有奏效。这是我现在的行:
ID: @{var fhirID = <processing for ID>; <a href='@routes.Users.fhirUserDetails(fhirID)'>fhirID</a>}
我之前 link 编辑的问题的公认答案也有效地使用了这个结构:
<a href='@routes.Application.show("some")'>My link with some string</a>
我的问题是双重的:
1) 如何将变量 fhirID 传递给控制器操作?我生成的 link 仅包含文本 "fhirID" 而不是语句第一部分生成的内容。
2) @routes.Users 语法是否正确?当我单击生成的 link 时,它实际上会尝试在 /myapp/@routes.Users.fhirUserDetails(fhirID)
呈现页面我意识到我可能遗漏了一些非常基本的东西 - 感谢您的任何建议!
问题似乎不是 @routes
语法(您完全正确),而是 Twirl 引擎看不到代码在哪里结束和 HTML 开始(或类似的东西)的情况无论如何...)
你包含的那一行,它有一个 var
和一个分号,这让我怀疑这一点,而且当我使用这种风格时我已经能够重现这个问题。
我的建议是使用 @defining
helper 而不是 var
来获取在您的链接中使用的范围变量,如下所示:
ID: @defining(<processing for ID>) { fhirID =>
<a href='@routes.Users.fhirUserDetails(fhirID)'>fhirID</a>
}
您可以根据需要尽可能深地嵌套 @defining
块,但如果有很多逻辑,调用可重用块可能会更好。我认为这种风格使模板更具可读性,而且在某种程度上看起来更像 "real Scala" :-)