2

我正在尝试呈现一个页面,其中包含一个链接,其 href 值为"javascript:#{mySmallJsSnippet}",其中mySmallJsSnippet一些 Javascript 向当前页面添加了一个<script>带有src="http://e.g.com/static/myFullJsFile.js".

我对此有几个问题,但主要的问题非常简单:

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

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

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

4

1 回答 1

7

您可以使用getUrlRender来自Yesod.Handler

getUrlRender :: GHandler sub master (Route master -> Text)

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

do render <- getUrlRender  
   let renderedUrl = render $ StaticR myFullJsFile_js

该函数会将您的类型安全呈现Route为 plain Text,您可以将其插入到脚本中。这样,您将失去 using 提供的正确性保证@{ ... },因此仅在必要时才应使用它。

Yesod Book中也有对这个功能的描述。

于 2013-03-30T15:34:47.630 回答