在ClojureScript中模板化

时间:2013-01-04 02:18:51

标签: clojure clojurescript client-side-templating

我想使用ClojureScript制作一个“单页”风格的网络应用程序。为此,我需要一个客户端模板系统。有没有人有任何经验和/或建议我应该研究哪些ClojureScript模板系统?感谢。

6 个答案:

答案 0 :(得分:5)

您可以查看dommy,这是Prismatic编写/使用的模板系统。

答案 1 :(得分:3)

我发现crate有帮助。

答案 2 :(得分:2)

同时使用Crate和Dommy我可以说它们都非常好。 Crate只是Clojure中Hiccup的一个实现转换为Clojurescript的模板,所以你仍然需要使用Domina来选择元素。如果你想要一个处理DOM选择和模板的框架,那么使用Dommy

答案 3 :(得分:2)

我知道Clojurescript的三种模板味道:

  1. Dommy:直接从cljs代码创建和操作DOM节点。
  2. Crate:声明并操纵cljs数据(矢量,地图等),然后将其转换为DOM节点。
  3. Enfocus:在HTML文件中编写HTML,处理它们并从cljs转换它们。这是一种不同的思考模板的方式,它基于clj库Enlive。
  4. 有些库可以生成React DOM节点而不是普通的DOM节点,但工作方式与上面提到的相同:

    1. 任何Cljs React包装器,如Om或Reagent
    2. Sablono
    3. Kioo
    4. 我知道你只是要求模板,而React带来的不止于此,但如果你除了最基本的操作之外还需要什么,我会推荐任何基于React的方法。

答案 4 :(得分: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")))

答案 5 :(得分:0)

除了您已收到的答案外,我还建议您查看基于React的系统,例如OmReagentQuiescent 。在这三个中,我个人最喜欢的是Reagent,但是它们中的任何一个都会比传统的DOM操作恕我直言。