问题标签 [heist]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
658 浏览

haskell - Snap:编译的拼接代码示例

我想我前段时间确实问过类似的问题,但由于 API 不稳定而没有回答。所以我在等待 0.13 过去。我不确定提出类似问题是否正确......?

runChildrenWith(Text)解释和mapSplices编译拼接世界的替代方案是什么?(这种组合似乎是最常见的)如果可能的话,我真的很感激一些代码示例。

如果我理解正确,我们将所有应用程序拼接在一起,然后将它们添加到heistInit. 任何人都可以展示如何做吗?

拼接绑定标签在整个应用程序中是否必须是唯一的?

是否有完整的 snap 项目utilising新的 API 和编译的拼接,以便我可以阅读和学习?

谢谢你。

- 更新 -

下面的答案很好。但不幸的是,有些部分(带镜片的部分)让我更加困惑。如果我理解正确,这是拼接字符串的简单方法:

如果我需要多次运行拼接字符串,比如在 5 个表中,我会这样做:

这个对吗?

我在尝试在抢劫配置中添加接头时遇到一堆错误。

我哪里错了?对不起,很慢。

我真正需要的(只是现在我可以理解)是拼接并显示一个我从数据库接收到的简单字符串。

-- 更新 2 --

感谢 Daniel 的极有帮助的回答,我终于可以开始工作了。

到目前为止,我得到了两种代码变体。

第一个,感谢丹尼尔

和秒

在哪里

产生类似的结果

以上有区别吗?任何情况下,人们会更喜欢另一种情况吗?它们似乎产生了相同的结果。

编译的拼接库中有一个“deferMany”函数,根据文档,它产生与解释库中的 mapSplices 相似的结果。我们可以用它来代替“C.manyWithSplices C.runChildren”的组合吗?

0 投票
1 回答
151 浏览

haskell-snap-framework - Snap:使用已编译的拼接访问数据库

我试图让我的头脑围绕已编译的接头。在之前的帮助下,我可以编译和呈现一些有用的结果。我不完全理解它的工作方式。

在解释模式下,算法很简单:构造根,调用给定映射url的处理函数,从数据库中提取数据,从提取的数据中构造和绑定拼接,将它们插入抢劫并调用适当的模板。

在编译模式下,这一切都是颠倒的。我将 url 直接映射到 cRender 并且不调用处理程序。所以我假设所有的拼接构造和数据处理函数都是在加载时调用的。

所以我的问题是什么时候调用数据库?这也发生在加载时吗?这只是我不明白的事件顺序。

由于拼接构造独立于特定的模板渲染,这是否意味着拼接绑定标签在整个应用程序中是唯一的?它们像全局变量吗?

谢谢

0 投票
1 回答
178 浏览

haskell - Snap:编译的拼接依赖于运行时决策和 URL 变量

我有一种情况,我必须构建已编译的接头并将数据输入其中,这取决于 URL 变量。我努力解决问题。

所以有一个简单的文件名列表需要在表格中呈现。简单的。文件属于一个组或类别,因此您可以列出所有文件或与特定类别相关的文件。我使用此功能提取数据:

如果它得到 Nothing 它会拉出整个列表,如果它得到 Just 类别它会拉出属于该类别的文件。到目前为止很容易。

我从处理程序中调用上述函数,以便可以将参数输入其中。

如果我在 URL 上得到“全部”或没有 - 我得到完整列表。除此之外的任何东西 - 我得到一个类别过滤列表。

URL 根目录如下所示

但是现在我遇到了一个问题,因为“方法”函数将只接受 Handler App App() 签名。我的处理程序返回要输入接头的数据。

我像这样构建我的拼接:

我找不到解决办法。可能只是错过了一些愚蠢的东西。任何想法我做错了什么?

无论如何,我的处理函数看起来不正确,因为我先渲染模板然后提取数据。如果我修复了处理程序,那么我将无法根据 URL 参数提供数据。

使困惑。

0 投票
1 回答
276 浏览

haskell - Snap:带有编译拼接的渲染表

好吧,这是我努力克服的编译拼接的另一个障碍。当我第一次使用原始的解释拼接时遇到了一些麻烦,现在我被困在将它翻译成编译的变体。

这里描述了原始问题:渲染表格

所以我需要构建这种结构:

这只是外部和内部循环,外部渲染原始数据和内部渲染单元。这一切都在原始链接中进行了描述。

它目前以解释模式实现,如下所示:

我已经挣扎了几天了,没有结果。这可能是由于缺乏对编译拼接 API 的理解。请帮忙!

编辑

我没有为我的问题提供足够的细节。我设法得到的上述解释变体的最佳近似值是:

这没用!问题是翻译原始渲染函数,即 tableRaw。所以我会提供更多细节。我输入 tableBody 的数据是一个类似 Map 的结构列表:

因此,要以原始形式提取数据,我需要映射标签列表

我可以毫无问题地使用解释的变量来做到这一点。tableRawS 的解释示例由文档参数化,但映射到 [labels]。我无法在编译的变体中实现这一点。我需要 tableRaw 函数中存在的文档和标签列表,以便我可以将不同的单元格拼接从文档中绑定出来。这是真正的痛苦。我不知道该怎么做。无论我做什么,我最终都会在文档上映射 tableRaw,而不是在标签列表上映射。

基本上。我从具有上述文档结构的数据库中获取 [document],并从数据库中获取标签,其中

我使用“at :: Label -> Value”从文档中获取数据 有了这些,我该如何呈现这个模板:

0 投票
1 回答
323 浏览

postgresql - 在 Heist 模板中使用来自 postgresql-simple 的结果

我正在尝试将这个Heist 教程和这个postgresql-simple 教程结合起来。

我尝试对此进行不同的变体。

但我一直收到这个错误。

我不知道如何实现该实例声明,我仍然没有完全掌握单子。我不确定我是否走在正确的轨道上。

编辑:感谢@mightybyte 的回答,我想出了这个。

0 投票
2 回答
344 浏览

haskell - Snap-Heist:为什么我的模板没有被渲染?

我正在尝试使用 Snap 和 Heist 渲染模板。

我确定我的处理函数被正确调用(如果我用 替换处理函数的内容undefined,它会按预期失败。Debug.Trace.trace也可以按预期工作)。

这个处理函数由一行组成:render "template". 但由于某种原因,我得到了No handler accepted <url>错误而不是 atemplate not found或类似的东西。

我认为这里的问题是我将模板放在错误的目录中,但是无法知道在哪里搜索模板。所以我的问题是:

  1. 这个错误信息不是误导吗?它应该是这样的template not found: template.tpl
  2. 我在哪里可以知道在哪些目录中搜索模板?

我认为由创建的快照应用程序snap init是问题所在。我只对它进行了轻微的修改:

  • 我又添加了一个字段来App记录:_myapp :: Snaplet Myapp
  • app初始化函数中,我添加了:n <- embedSnaplet "myapp" myapp myappInit然后将 n 传递给记录。
  • 我创建了新文件src/Myapp.hs

以下是中的相关部分Myapp.hs

但是由于某种原因,即使我rendering submit在转到时看到打印到控制台,我也会http://0.0.0.0:8000/myapp/submit收到No handler accepted "/hsnews/submit"作为 HTTP 响应的消息(而不是呈现的模板)。我有submit.tpl_submit.tplsnaplets/heist/myapp_templates.

0 投票
1 回答
166 浏览

haskell - 如何将简单的 Haskell 变量传递给 Heist 模板?

首先,我对 Snap 和 Heist 很陌生 :)

在我使用过的所有模板引擎中,总有一种方法可以将变量从渲染函数传递给模板。然后模板可以在其位置显示变量。现在,我确实明白 Heist 特别严格,但我什至没有尝试在这里执行循环或 if/else,只是显示一个随机数。我想这是一件非常基本的事情,但是我在文档中没有找到任何内容来说明如何在不使用拼接的情况下完成此操作。

所以简而言之,是否有可能有一个 Snap 处理程序生成一个数字,然后将其传递给 Heist 模板进行渲染,而不使用拼接?如果是,请给我一些示例代码,如果不是,请告诉我可以完成的最简单方法。

0 投票
1 回答
78 浏览

haskell-snap-framework - 从模板中窃取顶级标签?

我正在尝试学习如何使用 Snap 和 Heist,并希望将指向 JavaScript 库的链接放在适当的位置。我在以下位置创建了这个模板_js-libs.tpl

然后在base.tpl模板中尝试了这个:

但这只是导致<jquery></jquery><d3js></d3js>在页面中。我认为绑定标签在应用了包含绑定的模板的模板中不可见。如何在模板中创建这样的顶级标签?我只能找到在 Haskell 代码中创建顶级标签的示例。

0 投票
2 回答
91 浏览

haskell-snap-framework - 在模板目录之外使用 Heist 渲染模板

我正在使用 Snap 创建一个相当简单的投资组合,在大多数情况下,它只是将内容存储在数据库中并将其显示给用户。我希望拥有的功能之一是能够展示我的投资组合的退役设计。每个设计都只不过是一个模板和少量资产(图像、CSS 等)。出于组织目的,我想将属于单个设计的所有内容放在一起,并与我的投资组合的模板/资产分开。

我确实尝试使用serveDirectoryon archives。像人们期望的那样请求example.com/bar.com/2012/03/请求,这在某些情况下很好。archives/bar.com/2012/03/index.html我希望能够使用一些已编译的拼接或Charade,以便在无法复制原始内容时页面看起来不会那么空(通常是因为它来自早已被遗忘的数据库)。

也许为此目的制作一个单独的 snaplet 更有意义?如果是这样,我将如何去做?作为参考,我网站的 snaplet 相当基本,看起来像这样:

(PS 我有一个类似但不相关的项目,允许用户自定义他们自己的“站点”的外观。目前,自定义仅限于图像和 CSS。如果上述问题的解决方案可以用于允许自定义布局模板每个用户,那就太好了。如果没有,不用担心。)

0 投票
1 回答
127 浏览

haskell - 将运行时拼接与 Snap/Heist 应用程序集成

我正在使用 Heist 模板制作一个简单的 Snap 应用程序。我想将请求 url 打印到页面中。但是,不是运行我的拼接,而是输出只有拼接标签。我觉得我忽略了一些简单的事情,因为我找不到我的应用程序和我找到的教程之间的任何区别。

网站.hs:

索引.tpl:

据我所知,访问根路径 / 的渲染输出应该类似于

但实际上它是

我束手无策,试图弄清楚为什么我的接头没有运行。