在已编译的 Heist (Haskell) 中将数据直接传递到模板中?
Passing data directly into templates in compiled Heist (Haskell)?
我使用的是编译好的海斯特。我的拼接只做 运行 时间工作(没有加载时间工作)。我有一个 template.tpl
这样的:
<html>
<head>
<title><titleSplice/></title>
</head>
<body>
<bodySplice/>
</body>
</html>
这是我做事的方式:
- 在
/:param
路线的 Snap 动作中,我使用 renderTemplate heistState "template"
获得 MyHeistRuntimeMonad Builder
。
- 我可以通过 ReaderT 将
:param
值放入我的 运行time monad 来将其传递给我的拼接:type MyHeistRuntimeMonad = ReaderT String IO
。 (其中 String
用于传入的 :param
值。)
这就是我的问题。将数据从我的路由传递到我的拼接的唯一方法是通过 heist 运行time monad。这让事情变得有点复杂。我的问题:
- 除了
renderTemplate
之外,还有其他方法可以让我将数据直接传递给模板吗?例如,像这样:renderTemplate' "template" [("titleSplice", "myTitle"), ("bodySplice", "myBody")]
.
- 如果这不可能,为什么不呢?我只是想知道为什么事情是这样设计的。不太明白。
您关注 [("titleSplice", "myTitle"), ("bodySplice", "myBody")]
的运行时数据的示例远不如 Heist 公开的模型强大。您的模型是简单的标签名称替换。 Heist的拼接模型是Node -> m [Node]
。这允许它做非常强大的事情,比如 cache tag, the markdown tag, and even head merging with the html tag.
Heist 使用的 monad 转换器方法是一个简单而明显的实现,它使拼接可以访问所有运行时数据。它还将拼接视为后端提供的通用API,前端设计人员可以在任何地方使用。其他配方是否可行?我确定有。但是这个简单而强大。
您的公式也非常特定于模板。如果设计者想要向页面添加某种新类型的数据,您将不得不更改 Haskell 代码以适应这种情况。使用 Heist 的方法不需要 Haskell 代码更改。这给了设计师很大的权力,以一种非常解耦的方式改变事物。
我使用的是编译好的海斯特。我的拼接只做 运行 时间工作(没有加载时间工作)。我有一个 template.tpl
这样的:
<html>
<head>
<title><titleSplice/></title>
</head>
<body>
<bodySplice/>
</body>
</html>
这是我做事的方式:
- 在
/:param
路线的 Snap 动作中,我使用renderTemplate heistState "template"
获得MyHeistRuntimeMonad Builder
。 - 我可以通过 ReaderT 将
:param
值放入我的 运行time monad 来将其传递给我的拼接:type MyHeistRuntimeMonad = ReaderT String IO
。 (其中String
用于传入的:param
值。)
这就是我的问题。将数据从我的路由传递到我的拼接的唯一方法是通过 heist 运行time monad。这让事情变得有点复杂。我的问题:
- 除了
renderTemplate
之外,还有其他方法可以让我将数据直接传递给模板吗?例如,像这样:renderTemplate' "template" [("titleSplice", "myTitle"), ("bodySplice", "myBody")]
. - 如果这不可能,为什么不呢?我只是想知道为什么事情是这样设计的。不太明白。
您关注 [("titleSplice", "myTitle"), ("bodySplice", "myBody")]
的运行时数据的示例远不如 Heist 公开的模型强大。您的模型是简单的标签名称替换。 Heist的拼接模型是Node -> m [Node]
。这允许它做非常强大的事情,比如 cache tag, the markdown tag, and even head merging with the html tag.
Heist 使用的 monad 转换器方法是一个简单而明显的实现,它使拼接可以访问所有运行时数据。它还将拼接视为后端提供的通用API,前端设计人员可以在任何地方使用。其他配方是否可行?我确定有。但是这个简单而强大。
您的公式也非常特定于模板。如果设计者想要向页面添加某种新类型的数据,您将不得不更改 Haskell 代码以适应这种情况。使用 Heist 的方法不需要 Haskell 代码更改。这给了设计师很大的权力,以一种非常解耦的方式改变事物。