Haskell Yesod,如何从Javascript/Julius中的JSON数据生成类型安全链接

Haskell Yesod,如何从Javascript/Julius中的JSON数据生成类型安全链接,haskell,yesod,Haskell,Yesod,我有一条路线 /notes/#NoteId NoteR GET 从另一个页面,我想链接到它。 使用“经典”哈姆雷特时,很容易: <a href=@{NoteR $ entityKey note}>notetitle 编辑: 我在型号中有这个。hs: instance ToJSON (Entity Note) where toJSON (Entity nid (Note title content created_at updated_at userId))

我有一条路线

/notes/#NoteId    NoteR    GET
从另一个页面,我想链接到它。 使用“经典”哈姆雷特时,很容易:

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

编辑:

我在
型号中有这个。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 ]

我建议让
NotesR
路由返回完全呈现的URL,而不仅仅是noteID


编辑:我添加了一个食谱条目来演示这种方法:

我不擅长javascript,但在我看来,hamlet示例中的
注释
值是一个类型化的haskell值。但是julius代码中的
obj
是一个非类型化的javascript对象。没有已知类型的东西成为类型安全url的一部分有意义吗?我理解你的答案。。。但是怎么做呢?我在
Model.hs
中为实体注释提供了ToJSON实例(查看有问题的编辑)。这是有广告的地方吗?当使用
noternid
为url添加一行时,我得到一个错误,即数据构造函数不在范围内。。。当将此代码移动到处理程序文件中时,会出现另一个错误。推荐什么?我添加了一个烹饪书示例,希望能演示该方法。如果您有更多问题,请告诉我:谢谢。这就把事情弄清楚了!我正在努力获取正确的URL。我从这个例子开始:(不在处理程序中生成json)。当需要正确的url时,从处理程序内部生成json更有意义。您仍然可以使用这种样式,只需要多做一点工作。一种方法是在URL的数据类型中保留一个
文本
字段。一种更奇特的方法是为URL设置一个类型变量,然后使用呈现函数将类型安全URL转换为文本URL。但是在这种情况下,将代码保留在处理函数中可能是有意义的。
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 ]