在编译的Heist(Haskell)中将数据直接传递到模板中?
我使用编译的抢劫。我的接头仅执行运行时工作(无加载时工作)。我有一个在编译的Heist(Haskell)中将数据直接传递到模板中?,haskell,haskell-snap-framework,heist,Haskell,Haskell Snap Framework,Heist,我使用编译的抢劫。我的接头仅执行运行时工作(无加载时工作)。我有一个模板.tpl如下: <html> <head> <title><titleSplice/></title> </head> <body> <bodySplice/> </body> </html> 这就是我做事的方式: 在/:param路由的捕捉操作中,我使用renderTemplate
模板.tpl
如下:
<html>
<head>
<title><titleSplice/></title>
</head>
<body>
<bodySplice/>
</body>
</html>
这就是我做事的方式:
- 在
路由的捕捉操作中,我使用/:param
获取renderTemplate heistState“模板”
MyHeistRuntimeMonad生成器
- 我可以通过ReaderT将
值放入我的运行时monad,将其传递给我的接头::param
。(其中键入MyHeistRuntimeMonad=ReaderT String IO
表示传入的字符串
值。):param
renderTemplate
之外,是否没有其他方法允许我将数据直接传递到模板?例如,类似这样的内容:renderTemplate's“template”[(“titleSplice”、“myTitle”),(“bodySplice”、“myBody”)]
您所关注的运行时数据
[(“titleSplice”、“myTitle”),(“bodySplice”、“myBody”)]
的示例远不如Heist公开的模型强大。您的模型是简单的标记名替换。Heist的拼接模型是Node->m[Node]
。这使得它可以做一些非常强大的事情,比如
Heist使用的monad transformer方法是一个简单而明显的实现,它使拼接可以访问所有运行时数据。它还认为拼接是后端提供的通用API,前端设计师可以在任何地方使用。其他配方是否可行?我肯定有。但是这个简单而强大
您的公式也非常特定于模板。如果设计师想要向页面添加一些新类型的数据,那么必须更改Haskell代码以适应这种情况。使用Heist的方法,没有必要更改Haskell代码。这给了设计师很大的力量,可以以一种非常解耦的方式改变事物。Wow。我还没有完全明白这一点,但这很有帮助。在抢劫(和抓捕)的运作方式背后,似乎有一些真实而深刻的哲学。要是有人能写一本关于它的书就好了!