【问题标题】:Yesod, howto generate type-safe link from JSON-data in Javascript / JuliusYesod,如何在 Javascript / Julius 中从 JSON 数据生成类型安全的链接
【发布时间】:2013-01-03 15:44:28
【问题描述】:

我有一条路线

/notes/#NoteId    NoteR    GET

我想从另一个页面链接到它。 使用“经典”小村庄时,很简单:

<a href=@{NoteR $ entityKey note}>notetitle

我希望我的页面更加动态,并获取包含注释信息和注释 ID 的 JSON 数据。如何生成正确的类型安全链接?

我已经在.julius 文件中添加了这段代码,但它无法编译,因为它需要一个“NoteId”。我应该在 URL 插值 @{..} 的某处插入 obj.id... 任何线索如何做到这一点?

function loadnotes() {
var list = $("#results");
jQuery.getJSON("@{NotesR}",
    function(o){
        $.each(o, function (i, obj) {
            $('<a href=@{NoteR}/>' + obj.title + '</a>').appendTo(list);
        })});
}
window.onload = loadnotes;

编辑:

我有这个在Model.hs:

instance ToJSON (Entity Note) where
    toJSON (Entity nid (Note title content created_at updated_at userId)) = object
        [ "id" .= nid
        , "title" .= title
        , "content" .= (unTextarea content)
        , "created_at" .= created_at
        , "updated_at" .= updated_at
        , "userId" .= userId ]

【问题讨论】:

  • 我不擅长 javascript,但在我看来,hamlet 示例中的 note 值是一个类型化的 haskell 值。但是 julius 代码中的 obj 是一个无类型的 javascript 对象。将没有已知类型的东西作为类型安全 url 的一部分有意义吗?

标签: haskell yesod


【解决方案1】:

我建议让 NotesR 路由返回完整呈现的 URL 而不仅仅是注释 ID。

编辑:我添加了一个食谱条目来演示这种方法:https://github.com/yesodweb/yesod/wiki/Using-type-safe-urls-from-inside-javascript

【讨论】:

  • 我明白你的回答......但是如何?我在Model.hs 中有实体注释的 ToJSON 实例(查看有问题的编辑)。这是建议的地方吗?在为 url 添加一行时,使用NoteR nid,我收到数据构造函数不在范围内的错误...当将此代码移动到处理程序文件时,它会给出另一个错误。有什么推荐的?
  • 我添加了一个食谱示例,我希望它可以演示该方法。如果您还有其他问题,请告诉我:github.com/yesodweb/yesod/wiki/…
  • 谢谢。事情就这么清楚了!我正在努力获取正确的 URL。我从这个例子开始:yesodweb.com/blog/2012/04/yesod-js-todo(不在处理程序中生成 json)。当需要正确的 url 时,从内部处理程序生成 json 更有意义。
  • 您仍然可以使用该样式,只是需要多做一些工作。一种方法是在 URL 的数据类型中保留 Text 字段。一种更好的方法是为 URL 设置一个类型变量,然后使用渲染函数 fmap 从类型安全的 URL 转换为文本 URL。但在这种情况下,将代码保留在处理函数中可能是有意义的。
猜你喜欢
  • 2015-10-29
  • 2014-02-08
  • 2013-10-22
  • 1970-01-01
  • 1970-01-01
  • 2013-10-03
  • 2020-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多