ClojureScript中的模板化

6

我想使用ClojureScript制作一个“单页”风格的Web应用程序。为此,我需要一个客户端模板系统。有人有关于哪些ClojureScript模板系统值得一看的经验和/或建议吗?谢谢。

6个回答

5
你可以看一下 Prismatic 写/使用的模板系统 dommy

3

我发现Crate很有帮助。


2
我知道三种Clojurescript模板化方法:
  1. Dommy:直接从cljs代码创建和操作DOM节点。
  2. Crate:声明和操作cljs数据(向量、映射等),然后将其转换为DOM节点。
  3. Enfocus:在HTML文件中编写HTML,使用cljs处理和转换它们。这是一种不同的模板化思路,基于clj库Enlive实现。
有一些库可以产生React DOM节点,而不是普通的DOM节点,但工作方式与上述方法相同:
  1. 任何Cljs React包装器,如Om或Reagent
  2. Sablono
  3. Kioo
我知道你只问了模板化和React还包括其他方面,但如果你需要除最基本操作以外的任何内容,我建议使用任何基于React的方法。

2

我使用过Crate和Dommy,可以说它们都非常好。Crate只是Clojure中Hiccup的一种实现,转换成Clojurescript用于模板,因此您仍需要使用Domina选择元素。如果您想要一个既处理DOM选择又处理模板的框架,请使用Dommy。


1

迄今为止还没有提到:我非常喜欢Hoplon。它结合了以下一组工具:

  • 自定义HTML元素是常规函数,可以使用HLisp进行功能创建和组合。
  • 使用Javelin ClojureScript库的类似电子表格的数据流。使用单元格和公式直观地建模反应性行为。
  • 使用Castra Clojure和ClojureScript库与服务器交互。在服务器上定义函数,从客户端调用它们。

您可以将其用作全栈解决方案,也可以仅在客户端上使用它。为了给您留下印象(摘自GitHub):

(page "index.html")

(defn my-list [& items]
  (div
    :class "my-list"
    (apply ul (map #(li (div :class "my-list-item" %)) items))))

(def clicks (cell 0))

(html
  (head
    (title "example page"))
  (body
    (h1 "Hello, Hoplon")

    (my-list
      (span "first thing")
      (span "second thing"))

    (p (text "You've clicked ~{clicks} times, so far."))
    (button :click #(swap! clicks inc) "click me")))

0
除了你已经收到的答案之外,我建议你查看基于React的系统,例如OmReagentQuiescent。在这三个中,我个人最喜欢Reagent,但是任何一个都比传统的DOM操作更好,以我个人之见。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接