Web Development with Clojure CH1 (2)

使用 Light Table

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 花了一點時間~好用是好用,就是有時候會強退。

相關文章
相關標籤/搜索