Light Table 不須要任何的安裝,只要把它下載下來就可使用。它提供了一個簡潔的外觀,在默認狀況下只顯示了一個編輯區域,裏面是它的歡迎信息。css
(下面一段就基本是Light Table 的使用啦,我按着它把Light Table 用了個七七八八)數據庫
咱們須要添加工做區,找到view->workspace 點擊,就能夠打開工做區了,而後右擊工做區能夠選擇文件夾,把咱們的項目添加進來(p.s 這裏對原文進行了修改,這裏在個人電腦上最新的0.6.0好像bug比較多啊……右鍵選擇文件夾會強退,因此文件夾我是拖動添加的)。
這樣咱們就能夠打開咱們的guestbook
項目了。瀏覽器
如今,你的「留言簿」應該正在 http://localhost:3000
上運行着,咱們先按 ctrl+c來中止它,接下來就使用Light table 來運行它了。服務器
如今,咱們去 Light table 中建立一個 Clojure 的 REPL。在點擊 view->connections 後,會出現聯接區(connection panel)。
在這裏你就能看到各類不一樣的聯接類型,咱們在這裏選擇 Clojure 。編輯器
選擇以後會彈出文件選擇器,選擇guestbook
項目下的project.clj
就能夠運行它了。函數
其實,不用進行鏈接,也能夠在編輯區域執行(evaluation)!如今就能夠試一下,按下Ctrl+Enter
(mac 下是cmd+Enter
),若是咱們如今正在 home.clj
文件中,那麼就會看到光標後面會顯示這麼一行文字工具
#'guestbook.routes.home/home-routes
這就代表,如今這個文件已經被執行,在 REPL 中已經可使用它了。
咱們將打開Instarepl
(ctrl+空格打開commands,輸入repl,選擇 Open a clojure instarepl),在這裏咱們就能夠輸入一些簡單的句,在這裏,它被做爲一個實時的REPL引入,因此代碼會當即執行。佈局
如今咱們須要引用命名空間 guestbook.repl
,而後來啓動server。測試
(use 'guestbook.repl) (start-server)
當語句執行以後,HTTP服務器會打開一個新的瀏覽器頁面,顯示當前項目的主頁。lua
若是你不想讓已經執行過的語句再次執行,那麼只要把代碼從編輯框中刪除就行了。
或者關閉 Instarepl 的 live 模式。
在關閉 Instarepl 的 live 模式以後,輸入的代碼也可使用 Alt-Enter來進行執行。
如今,讓咱們引用命名空間 home
而後調用 home
方法。這裏你能看到簡單調用的函數情意的就輸出了一整個主頁的HTML代碼。
在這裏,咱們使用 verctors 來模擬了HTML標籤的結構,若是在home函數中添加一點新的標籤,那麼頁面也會隨之改變,如今就讓咱們來擴展一下home
方法,讓它能夠顯示一個標題,而且添加一張收集信息的表格。
(defn home [] (layout/common [:h1 "Guestbook"] [:p "Welcome to my guestbook"] [:hr] [:form [:p "Name:"] [:input] [:p "Message:"] [:textarea {:rows 10 :cols 40}]]))
如今刷新頁面,就能看到修改的內容已經顯示出來了。
(以上就是混雜着 Light Table 教程的部分)
這個時候你可能已經猜到了,下面的這個函數是用來把home
綁定到路由/
上面。
(defroutes home-routes (GET "/" [] (home))
在這裏,咱們使用了宏 defroutes
,在命名空間 home 中定義了路由。
每個路由至關於一個URI,在你請求相應地址的時候,會根據路由的不一樣做出不一樣的響應。它以HTTP請求的類型開頭,諸如GET、POST,而後就跟着參數和相應的主體部分。
在咱們爲項目增長更多的功能以前,先來看一下lein爲咱們生成的項目中的文件吧。
當在工做區展開咱們的項目,它看上去應該是這樣的:
guestbook/ resources/ public/ css/ screen.css img/ js/ src/ guestbook/ models/ routes/ home.clj views/ layout.clj handler.clj repl.clj target/ test/ guestbook/ test/ hanlder.clj project.clj README.md
在整個項目中,根目錄下的project.clj
是用來構建和配置整個應用的。
在項目中,還有這幾個文件夾:src
是存放應用代碼的地方,resources
文件夾下存放的是和項目相關的一系列靜態文件,像CSS、JavaScript、圖片文件等。還有就是 test
文件夾,裏面能夠添加咱們對應用的測試文件。
Clojure的命名空間是遵循了JAVA包命名的規則的,這就意味着命名空間會有前綴。這個前綴必須和它所在的文件夾還有文件名稱匹配。值得注意的是,若是一個命名空間包含有破折號,它們必須被轉換爲下劃線來對應相應的文件夾和文件名,由於在JAVA中,使用破折號來爲包命名是不被容許的。Clojure由於要被編譯成JVM字節碼,因此這些規則是必定要遵照的。
當咱們爲咱們的項目命名爲 guestbook
後,因此的命名空間(namespace
)都相應的放在了src/guestbook
文件夾下,讓咱們來看一下里面有什麼:首先是命名空間guestbook.handler
在文件src/guestbook/handler.clj
中,在這個命名空間中,包含了咱們進入應用的入口,而且定義了處理函數來處理相應的請求。
命名空間guestbook.repl
能夠在文件src/guestbook/repl.clj
中找到,它包含了在REPL中啓動和暫停server的函數,咱們能夠在編輯器中直接使用它來啓動server來代替使用lein啓動的方法。
接下來就是文件夾models
,這個命名空間是爲了從此定義應用的模型層而保留的,這類的命名空間一般完成的任務是鏈接數據庫,定義表結構以及進行存儲操做(records access)。
在routes
文件夾中的命名空間主要解決的是路由定義的問題,路由構成的入口是咱們進行工做流選擇的工具。(The routes constitute entry points for any workflows we choose to implement. 這句實在不知道怎麼翻譯)目前已經有一個到主頁的路由被定義在了命名空間guestbook.routes.home
之中,能夠在文件src/guestbook/routes/home.clj
中找到它。
接下來就是views
文件夾了,這個命名空間中處理的主要是關於應用的可視化部分的佈局信息,在命名空間guestbook.views.layout
中,它定義了基本的網頁結構。
研究Light table 花了一點時間~好用是好用,就是有時候會強退。