【问题标题】:Templating in ClojureScript [closed]ClojureScript 中的模板 [关闭]
【发布时间】:2012-12-18 11:35:04
【问题描述】:

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

【问题讨论】:

    标签: clojure clojurescript client-side-templating


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我发现 crate 很有帮助。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          我知道 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. 萨布洛诺
          3. 基欧

          我知道你只是要求模板,而 React 提供的不止这些,但如果你需要除了最基本的操作之外的任何东西,我会推荐任何基于 React 的方法。

          【讨论】:

            【解决方案5】:

            由于到目前为止尚未提及:我真的很喜欢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")))
            

            【讨论】:

              【解决方案6】:

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2015-12-19
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多