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 ]