手动呈现路线的URL

Chr*_*ink 3 haskell yesod

我正在尝试渲染一个包含href值为的链接的页面"javascript:#{mySmallJsSnippet}",其中mySmallJsSnippet有一些Javascript会将当前页面添加到<script>标记中src="http://e.g.com/static/myFullJsFile.js".

我有几个问题,但主要的一个是令人尴尬的简单:

给定一条路线 - 例如StaticR myFullJsFile_js- 如何将路线的URL渲染为字符串,以便将其嵌入mySmallJsSnippet?基本上,我不知道如何在我的处理程序代码中执行Yesod的模板渲染机制自动执行的操作@{fooBaR}.

我怀疑它有做renderRoutejoinPath,但我没有使用joinPath正确的.到目前为止,我最好的猜测是App从Foundation.hs 导入并将其作为joinPath第一个参数传递- 不行.

我会继续寻找,但是能得到一些帮助会很棒,因为我确信对于有过Yesod经验的人来说这很简单.

Jak*_*kub 8

您可以使用getUrlRenderYesod.Handler:

getUrlRender :: GHandler sub master (Route master -> Text)
Run Code Online (Sandbox Code Playgroud)

在您的情况下,它将如下所示:

do render <- getUrlRender  
   let renderedUrl = render $ StaticR myFullJsFile_js
Run Code Online (Sandbox Code Playgroud)

该函数将使您的类型安全Route变为普通Text,您可以将其插入到脚本中.这样您就会失去使用时提供的正确性保证@{ ... },因此您应该在必要时再次使用它.

Yesod Book中还有对此功能的描述.