我的common.cljc文件如下所示:
(ns example.common
#?(:cljs
(:require [goog.dom :as gdom])
)
)
#?(:cljs (enable-console-print!))
(defn mobile? []
#?(:cljs (def hvpsize (.. (gdom/getViewportSize) -height)))
#?(:cljs (def wvpsize (.. (gdom/getViewportSize) -width)))
#?(:cljs (if (<= (/ wvpsize hvpsize) 1) true false))
)
(def mobile-value (mobile?))
(println "mobile-value inside .cljc")
(println mobile-value)我的routes.clj文件如下所示:
(ns example.routes
(:gen-class)
(:use compojure.core
example.views
example.common
[hiccup.middleware :only (wrap-base-url)])
)
(use '[ring.util.response :only [response]])
(use '[ring.adapter.jetty :only [run-jetty]])
(require '[compojure.route :as route])
(defn -main
"I don't do a whole lot ... yet."
[& args]
(println "Hello, World!"))
(defn d-or-m-version []
(.println System/out "Inside d-or-m-version")
(.println System/out mobile-value)
(if mobile-value (root-page-mobile) (root-page-desktop))
)
(defroutes main-routes
(GET "/" [] (d-or-m-version))
(route/not-found "404"))
(defonce server (run-jetty #'main-routes {:port 8080 :join? false}))在.cljc文件中甚至在我有的一个单独的.cljs文件中重新加载页面时,mobile-value都能正确计算。
问题是,当在routes.clj中计算mobile-value时,它只返回null。因此,d-or-v-version中的if语句不会从单独的views.clj文件中调用正确的hiccup html。
我假设mobile-value返回null,因为routes.clj在common.cljc之前运行,而mobile-value没有值。然而,我不知道如何解决这个问题,任何帮助都将不胜感激。
发布于 2017-11-05 02:31:43
当从Clojure调用它时,它的计算结果为nil,因为它在Clojure中是一个空函数。Clojure读取器条件告诉#?(:cljs编译器忽略此表单,因为它应该只由Clojurescript编译器计算。
由于该函数中的所有形式对于Clojure编译器来说都不存在,因此该函数为空,并且它的计算结果始终为nil。
https://stackoverflow.com/questions/47114080
复制相似问题