您可以使用在編譯時執行的宏來執行此操作。
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")
這將生成包含從資源/文件夾中的文件中讀取的字符串的變量head
,nav
,foot
。
資源/ 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";
看一看https://github.com/ckirkendall/enfocus可裝配你需要什麼。 clojurescript,編譯模板。 – edbond
謝謝,我會看看如果這可能對我們有用。不知道它是否解決了有一個單獨的js文件包含模板的問題,但對於其他模塊來說似乎可靠 - 我必須嘗試一下並看看。欣賞它! –