【发布时间】:2011-06-05 22:13:52
【问题描述】:
[这似乎是 Compojure 的问题,但不是 - 它是 Clojure 的问题]
在这个看似简单的问题上,我一直在努力解决问题 - 但无济于事。
我正在使用 Compojure(Clojure 的轻量级 Web 框架),我只想生成一个网页,显示我在 PostgreSQL 数据库中的待办事项列表。
代码 sn-ps 如下(省略了数据库连接、查询等 - 但不需要该部分,因为具体问题是生成的 HTML 在
和 标记之间不显示任何内容) .作为测试,我尝试在对 main-layout 的调用中对字符串进行硬编码,如下所示:
(html (main-layout "Aki's Todos" "Haircut
Study Clojure
Answer a question on Stackoverfolw")) - 它工作正常。
所以真正的问题是我不相信我知道如何在 Clojure 中构建字符串。不是惯用的方式,也不是通过调用 Java 的 StringBuilder ——正如我在下面的代码中尝试做的那样。
一款虚拟啤酒,给能解决这个问题的人点赞!非常感谢!
================================================ ===============
;The master template (a very simple POC for now, but can expand on it later)
(defn main-layout
"This is one of the html layouts for the pages assets - just like a master page"
[title body]
(html
[:html
[:head
[:title title]
(include-js "todos.js")
(include-css "todos.css")]
[:body body]]))
(defn show-all-todos
"This function will generate the todos HTML table and call the layout function"
[]
(let [rs (select-all-todos)
sbHTML (new StringBuilder)]
(for [rec rs]
(.append sbHTML (str rec "<br><br>")))
(html (main-layout "Aki's Todos" (.toString sbHTML)))))
================================================ ===============
同样,结果是一个网页,但正文标签之间没有任何内容。如果我用 println 语句替换 for 循环中的代码,并将代码定向到 repl - 忘记网页内容(即对 main-layout 的调用),结果集将被打印 - 但是 - 问题在于构建上弦。
再次感谢。
~阿基
【问题讨论】:
-
致 Gorgan Jovic - 抱歉,我删除了最后一个问题“我如何循环遍历结果集并在 Clojure 中建立一个字符串”并将其替换为这个问题。我试图找到一种方法来通知你,但不能。在回答您的问题“什么是'选择所有待办事项'返回”时,它是一个惰性序列 - 待办事项的结果集。每个项目有 8 个字段(一个 clojure 映射)。我可以通过在 for 循环中使用 println 语句将结果集打印到 repl - 但我想要做的是构建一个字符串,并将字符串传递给 main-layout 函数,以便它可以流式传输到浏览器。
标签: clojure