ClojureScript没有这样的名称空间

ClojureScript没有这样的名称空间,clojure,clojurescript,Clojure,Clojurescript,我是Clojure的新手,我正在尝试在我的项目中实现一些ClojureScript函数。我在project.clj中将[org.clojure/clojurescript“0.0-2138”]添加到我的依赖项中。例如,我试过: (js/alert "Hello from ClojureScript.") 它说没有这样的名称空间:js 我做错了什么?有人能帮忙吗 这是我完整的项目。clj: (defproject MyProject "0.1.0-SNAPSHOT" :descripti

我是Clojure的新手,我正在尝试在我的项目中实现一些ClojureScript函数。我在
project.clj
中将
[org.clojure/clojurescript“0.0-2138”]
添加到我的依赖项中。例如,我试过:

(js/alert "Hello from ClojureScript.")
它说
没有这样的名称空间:js

我做错了什么?有人能帮忙吗

这是我完整的
项目。clj

(defproject MyProject "0.1.0-SNAPSHOT"
    :description "FIXME: write description"
    :url "http://example.com/FIXME"
    :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
    :dependencies [[org.clojure/clojure "1.5.1"][table "0.4.0"][cljs-uuid "0.0.4"][lein-swank "1.4.5"][midje "1.5.1"]
                 [mysql/mysql-connector-java "5.1.18"][org.clojure/java.jdbc "0.1.1"]
                 [ring/ring-jetty-adapter "1.1.6"]
                 [compojure "1.1.3"]
                 [hiccup "1.0.2"]
                 [org.clojure/clojurescript "0.0-2138"]
                 [domina "1.0.2"]
                 [prismatic/dommy "0.1.1"]]

     :plugins [[lein-cljsbuild "0.3.4"]]

      ;; cljsbuild options configuration
      :cljsbuild {:builds
              [{;; CLJS source code path
                :source-paths ["src/cljs"]

                ;; Google Closure (CLS) options configuration
                :compiler {;; CLS generated JS script filename
                           :output-to "resources/public/js/test.js"
                           ;; minimal JS optimization directive
                           :optimizations :whitespace
                           ;; generated JS code prettyfication
                           :pretty-print true}}]}
)
这就是我试图放置ClojureScript函数的文件。我正在使用Eclipse和Clojure REPL

(ns webapp.pages
    (:use [compojure.core :only (defroutes GET)]
        [ring.adapter.jetty :as ring])
     (:require [clojure.java.jdbc :as sql])
    (:require
        [ring.util.response :as resp])
    (:use [hiccup.page :only (html5 include-css include-js)])
    (:use webapp.db)
)

(defn showAlert []
    (js/alert "Hello from ClojureScript.")
)

(defn insert-user [firstname lastname email password sex date]
    (sql/with-connection db

      (sql/insert-values :users
                      [:name :lastName :email :password :birthDate :gender]
                      [firstname lastname email password date sex])

    )
    (resp/redirect "/")

    (showAlert)
)

(defn index []

    (html5
     [:head
        [:title "Kladionica"]
        [:meta {:name "viewport" :content "width=device-width, initial-scale=1"}]
        (include-css "/public/css/bootstrap.min.css")
        ]
     [:body
       [:div {:class "modal fade" :id "myModal" :role "dialog" :aria-hidden "true"}
        [:div {:class "modal-dialog"}
          [:div {:class "modal-content"}
                             [:div {:class "modal-header"}
                                   [:button {:type "button" :class "close" :data-dismiss "modal"}"x"]
                                   [:h3 "Registracija"]
                             ]
                             [:div {:class "modal-body"}
                                   [:form {:action "/insert-user" :method "post" :class "form" :role "form"}
                                          [:div {:class "row"}
                                                [:div {:class "col-xs-6 col-md-6"}
                                                      [:input {:class "form-control" :style "margin-bottom: 10px;" :name "firstname" :placeholder "Ime" :type "text"}]


                                                ]
                                                 [:div {:class "col-xs-6 col-md-6"}

                                                      [:input {:class "form-control" :style "margin-bottom: 10px;" :name "lastname" :placeholder "Prezime" :type "text"}]

                                                ]

                                          ]
                                          [:input {:class "form-control" :style "margin-bottom: 10px;" :name "email" :placeholder "Email" :type "email"}]
                                          [:input {:class "form-control" :style "margin-bottom: 10px;" :name "password" :placeholder "Lozinka" :type "password"}]
                                          [:input {:class "form-control" :style "margin-bottom: 10px;" :name "re-password" :placeholder "Ponovljena lozinka" :type "password"}]
                                          [:label {:for ""} "Datum rodjenja"]
                                          [:div {:class "row"}
                                                [:div {:class "col-xs-4 col-md-4"}
                                                      [:select {:class "form-control" :name "month"}
                                                               [:option {:value "" :disabled "disabled" :selected "selected"} "Mjesec"]
                                                               [:option {:value "01"} "Januar"]
                                                               [:option {:value "02"} "Februar"]
                                                               [:option {:value "03"} "Mart"]
                                                               [:option {:value "04"} "April"]
                                                               [:option {:value "05"} "Maj"]
                                                               [:option {:value "06"} "Jun"]
                                                               [:option {:value "07"} "Jul"]
                                                               [:option {:value "08"} "Avgust"]
                                                               [:option {:value "09"} "Septembar"]
                                                               [:option {:value "10"} "Oktobar"]
                                                               [:option {:value "11"} "Novembar"]
                                                               [:option {:value "12"} "Decembar"]

                                                      ]
                                                ]
                                                [:div {:class "col-xs-4 col-md-4"}
                                                      [:select {:class "form-control" :name "day"}
                                                               [:option {:value "Day" :disabled "disabled" :selected "selected"} "Dan"]
                                                               (for [i  (range 1 32)]
                                                                 [:option {:value i} i]
                                                                 (inc i))
                                                      ]
                                                ]
                                                [:div {:class "col-xs-4 col-md-4"}
                                                      [:select {:class "form-control" :name "year"}
                                                               [:option {:value "Year"} "Godina"]
                                                               (for [i  (range 1900 2015)]
                                                                 [:option {:value i} i]
                                                                 (inc i))
                                                      ]
                                                ]
                                          ]
                                          [:label {:class "radio-inline"}
                                                  [:input {:type "radio" :name "sex" :id "maleId" :value "male"}]
                                                  "Musko"
                                          ]
                                          [:label {:class "radio-inline"}
                                                  [:input {:type "radio" :name "sex" :id "femaleId" :value "female"}]
                                                  "Zensko"
                                          ]
                                          [:br]
                                          [:br]
                                          [:button {:class "btn btn-lg btn-primary btn-block" :type "submit"} "Registruj se"]


                                   ]
                             ]
                             [:div {:class "modal-footer"}
                             ]
                             ]
                             ]
                       ]

       [:div {:class "navbar navbar-inverse navbar-static-top"}
           [:div {:class "container"}
                 [:a {:href "#" :class "navbar-brand"} "TOP Kladionica"]
                 [:div {:class "navbar-collapse collapse"}
                    [:ul {:class "nav navbar-nav navbar-right"}

                       [:li [:a {:href "#myModal" :data-toggle "modal"} "Registracija"]]

                       [:li {:class "dropdown"}
                            [:a {:href "#" :class "dropdown-toggle" :data-toggle "dropdown" } "Login" [:b {:class "caret"}]]
                            [:ul {:class "dropdown-menu" :style "padding:15px;min-width:250px;"}
                                 [:li
                                     [:div{:class "row"}
                                           [:div {:class "col-md-12"}
                                                 [:form {:class "form" :role "form" :method "post" :action "login" :accept-charset "UTF-8" :id "login-nav"}
                                                         [:div {:class "form-group"}
                                                                [:label {:class "sr-only" :for "inputEmail"} "Email adresa"]
                                                                [:input {:type "email" :class "form-control" :id "inputEmail" :placeholder "Email adresa" }]
                                                         ]
                                                         [:div {:class "form-group"}
                                                                [:label {:class "sr-only" :for "inputPassword"} "Lozinka"]
                                                                [:input {:type "password" :class "form-control" :id "inputPassword" :placeholder "Lozinka" }]
                                                         ]
                                                         [:div {:class "checkbox"}
                                                               [:label
                                                                      [:input {:type "checkbox"} "Zapamti me"]

                                                               ]
                                                         ]
                                                         [:div {:class "form-group"}
                                                               [:button {:type "submit" :class "btn btn-success btn-block"} "Login"]
                                                         ]
                                                 ]
                                           ]
                                     ]
                                 ]
                                 [:li {:class "divider"}]
                                 [:li
                                     [:input {:class "btn btn-primary btn-block" :type "button" :id "sign-in-google" :value "Google prijava"}]
                                     [:input {:class "btn btn-primary btn-block" :type "button" :id "sign-in-twitter" :value "Twitter prijava"}]
                                 ]
                            ]
                       ]
                    ]
                 ]
           ]
        ]
        [:div {:class "navbar navbar-default navbar-fixed-bottom"}
        [:div {:class "alert alert-success alert-dismissable pull-right" :style "display:none"}
             [:button {:type "button" :class "close" :data-dismiss "alert" :aria-hidden "true"} "x"]
             [:strong "Uspijeh!"] "Uspjesno ste se registrovali!"
        ]
       ]
       (include-js "//code.jquery.com/jquery-1.10.2.min.js")
       (include-js "/public/js/bootstrap.js")
       ]
     )
)

这里有几件事

首先,ClojureScript是一种独立的(但相关的)语言,它有自己的编译器,所以不能将ClojureScript代码放在Clojure文件中

其次,ClojureScript需要编译成JavaScript才能执行任何操作,然后JavaScript需要由JavaScript引擎执行。您可以使用leincljsbuild插件进行编译

要快速简单地介绍ClojureScript,请看David Nolen的。它将在几秒钟内启动并运行,您可以查看生成的project.clj文件,看看如何为ClojureScript设置项目(如果您好奇的话)


但是,如果您对Clojure非常陌生,那么在开始使用ClojureScript之前,最好先熟悉Clojure和Leiningen。您不必这样做,但可能会更简单。

正如其他用户在这里评论的那样,您必须将ClojureScript代码与Clojure代码分开(如果您使用cljsbuild来构建cljs代码,标准方法是分开目录)

为什么不在同一个文件中使用Clojure和ClojureScript


这不是一个确切的问题,因为在键入ClojureScript代码时,您应该将其感觉为Clojure代码。问题是,当您尝试在ClojureScript代码中使用外部Clojure库(而不是核心Clojure)时,这样的外部库使用主机JVM类,而ClojureScript库使用主机Javascript类。这就是为什么您必须在ClojureScript代码中使用ClojureScript库(适用于JavaScript类的库),这也是您的文件有点凌乱的原因。

您一定误解了我,我没有将程序代码放在project.clj中,我在一个单独的clojure命名空间中尝试过…我也尝试过添加lein cljsbuild插件,但没有成功…@Shile:你说得对,很抱歉。已编辑,但我认为其余部分仍然正确。@Chuck就在这里。您需要将Clojure代码与ClojureScript代码分开。ClojureScript代码(如js/alert)应该放在src/cljs下的文件中。然后,运行“leincljsbuild”,并在您的网站中包含生成的JS文件“resources/public/JS/test.JS”。在服务器端,您还需要做一些更改(例如,启动web服务器)。看一看,上面提到的ClosureScript精髓的链接已经不存在了。一个更为更新的版本似乎是。请仁慈地向我们展示您的文件夹结构,您试图在其中编写此ClojureScript的文件,并描述运行它的方式。ThanksHi@Shile,为了更好地理解您的问题,我需要向您询问一些细节:您是使用repl、brepl还是浏览器来测试您的应用程序?这个clj文件在哪里?它的全名是什么?@tangrammer我正在使用repl启动我的jetty服务器,然后在浏览器中测试我的应用程序,全名是webapp.pages.clj…它位于eclipse中clojure项目的src文件夹中。拥有文件名,而不仅仅是内容,会很有帮助。延期事宜。