【问题标题】:Clojurescript templating from html files来自 html 文件的 Clojurescript 模板
【发布时间】:2014-05-20 18:52:30
【问题描述】:

我是 clojure / clojurescript 的新手,所以可能有一个我忽略的简单解决方案,但这是我的问题:

我有现有的 html 文件(只是原始 html,没有变量或任何东西)我想用作 clojurescript 项目的部分(这些 html 文件是导航、页脚等内容)。我想在 clojurescript 项目中需要这些 html 模板,然后将模板内联到编译的 js 中,这样我就不必对生产中的模板进行任何 ajax 调用或复制 html 文件以供使用生产中的客户。像 requirejs 和 browserify 这样的项目有插件让你“需要” html 文件 - clojurescript 有没有等价物?

我知道一些库可以进行模板/dom 操作,所以这不是问题。它只是将多个外部 html 文件转换为内联字符串/dom 节点/要包含在生产 js 中的任何内容。

谢谢

【问题讨论】:

  • 看看github.com/ckirkendall/enfocus 可能适合您的需要。 clojurescript,编译模板。
  • 谢谢,我看看这是否对我们有用。不确定它是否解决了具有单个 js 文件包括模板的问题,但对于其余部分来说似乎很可靠 - 我将不得不尝试看看。欣赏!

标签: clojurescript


【解决方案1】:

您可以使用在编译时执行的宏来做到这一点。

project.clj

  :dependencies [[org.clojure/clojure "1.6.0"]
                 [org.clojure/clojurescript "0.0-2202"]]
  :source-paths ["src"]
  :cljsbuild
  {:builds
   [{:id "main"
     :source-paths ["src/cljs"]
     :compiler
     {
      :output-to "resources/main.js"
      :optimizations :whitespace
      :pretty-print true}}]})

src/cljstemplates/core.clj

(ns cljstemplates.core
  (:require [clojure.java.io :refer (resource)]))

(defmacro deftmpl
  "Read template from file in resources/"
  [symbol-name html-name]
  (let [content (slurp (resource html-name))]
    `(def ~symbol-name
       ~content)))

src/cljs/web.cljs

(ns cljstemplates.web
  (:require-macros [cljstemplates.core :refer [deftmpl]]))

(deftmpl head "header.html")
(deftmpl nav "nav.html")
(deftmpl foot "footer.html")

这将生成变量headnavfoot,其中包含从资源/文件夹中的文件读取的字符串。

resources/nav.html

<nav>
  <ul>
    <li>Tweets</li>
  </ul>
</nav>

输出(main.js):

cljstemplates.web.nav = "\x3cnav\x3e\n  \x3cul\x3e\n    \x3cli\x3eTweets\x3c/li\x3e\n  \x3c/ul\x3e\n\x3c/nav\x3e\n";

【讨论】:

  • 哇,太棒了,谢谢。作为一个 clojure 新手,我必须先读几遍才能得到它,但这非常有帮助。
猜你喜欢
  • 2013-06-08
  • 2017-08-10
  • 2017-09-05
  • 1970-01-01
  • 2012-12-18
  • 2013-01-22
  • 2016-04-13
  • 2015-01-20
  • 1970-01-01
相关资源
最近更新 更多