【问题标题】:Using Type-safe URLs with setMessage? (shamlet versus hamlet)使用带有 setMessage 的类型安全 URL? (小村庄与小村庄)
【发布时间】:2013-03-06 14:10:15
【问题描述】:

如何在 setMessage 中使用类型安全的 url?

我想改变

 ...
 setMessage [shamlet|<span .warning>Warning! See Help.|]
 ...

到包含链接的消息。

从我目前收集到的信息来看,它应该是这样工作的

 ...
 renderer <- getUrlRender
 let html = [hamlet|<span .warning>Warning! See #
                     <a href=@{HelpR}> Help!|]
 setMessage $ toHtml $ html renderer
 ...

但该代码只会让我在整个文件中显示令人困惑的错误消息。

我确实阅读了有关莎士比亚模板的印刷版 Yesod Book Chapter,但我发现它对所涉及的类型不是很明确。例如[hamlet|...|]| 产生什么类型?如果没有 URL-Interpolation,ghci 会报告 t -&gt; Markup,但如果在内部使用 URL-Interpolation,我只会收到错误消息。

我对所涉及的所有类型同义词感到更加困惑,例如[shamlet|...|] 提供Html 类型的东西,而setMessage 期望Html ()。我不知道如何轻松查找这些内容:Hoogle 经常找不到关于该主题的任何内容,而 Google 总是找到可能过时的版本(以及不再有效的示例) - 确定我最终会获得最新版本,但有没有地方可以我对这些有一个简单的概述? (ghci 可以列出一个类型的所有同义词吗?)

请注意,我实际上想在纯功能代码片段中生成消息,稍后由处理程序使用。这就是为什么我想将 URL 渲染与指定小村庄的位置分开。感谢任何指向正确方向的指针!

【问题讨论】:

    标签: yesod hamlet


    【解决方案1】:

    我想你想使用getUrlRenderParams。奇怪的是,今天在 IRC 上出现了一个相关的讨论。 Hamlet 模板将 URL 呈现函数作为其第一个参数,并且该函数必须具有两个参数:一个类型安全的 URL 和一个查询字符串参数列表。 getUrlRender 返回一个不接受查询字符串参数的函数,这就是您需要 getUrlRenderParams 的原因。

    【讨论】:

    • 谢谢!所以至少我很接近。我已经为这个问题苦苦挣扎了很长一段时间,尤其是因为我对网页设计了解不多,并且认为将链接与 setMessage 一起使用可能是不好的风格,因为 Yesod Book 没有提到类似的东西。好吧,其他人在同一天询问确实是一个奇怪的巧合,但我自己从不使用 IRC,我只是在自己修补以了解更多关于 Yesod 的信息。所以也许应该在某个地方有一个例子。
    猜你喜欢
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 2019-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多