Clojure 从.cljc调用到.clj的值始终为null
我的common.cljc文件如下所示:Clojure 从.cljc调用到.clj的值始终为null,clojure,clojurescript,Clojure,Clojurescript,我的common.cljc文件如下所示: (ns example.common #?(:cljs (:require [goog.dom :as gdom]) ) ) #?(:cljs (enable-console-print!)) (defn mobile? [] #?(:cljs (def hvpsize (.. (gdom/getViewportSize) -height))) #?(:cl
(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)
(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}))
mobile value
在.cljc文件中重新加载页面时,甚至在我拥有的单独的.cljs文件中,计算结果都是正确的
问题是当在routes.clj中计算移动值时,它只返回null。因此,d-or-v-version
中的if语句不会从单独的views.clj文件调用正确的hiccup html
我假设
mobile value
返回null,因为routes.clj在common.cljc之前运行,而mobile value
没有值。然而,我不知道如何解决这个问题,任何帮助都将不胜感激 从Clojure调用时,它的计算结果为nil
,因为它在Clojure中是一个空函数。#?(:cljs
reader conditional告诉Clojure编译器忽略此表单,因为它应该仅由Clojurescript编译器计算
由于Clojure编译器不存在该函数中的所有形式,因此该函数为空,当从Clojure调用时,它的计算结果将始终为
nil,因为它是Clojure中的空函数?(:cljs
reader conditional告诉Clojure编译器忽略此表单,因为它应该仅由Clojurescript编译器计算
由于Clojure编译器不存在该函数中的所有形式,因此该函数为空,并且它的计算结果将始终为
nil
啊,这很有意义,感谢您的响应。我是否可以在mobile?
中以Clojure编译器可以计算的方式捕获该布尔值?或者其他方式为了解决这个问题,我似乎能够判断用户是否在手机上的唯一方法是通过cljs使用js LIB,但我的所有路线都必须在clj中,因此让他们互相交谈似乎是不可避免的(但也是常见的)问题。我认为您必须让客户端告诉服务器它是否是移动的。也就是说,这不是您的服务器的编译时问题。但是当客户端最终必须告诉服务器“嘿,为移动上的根路径页面加载此特定的html/css”如何在不遇到此问题的情况下从客户端到服务器交换该值?抱歉,我可能误解了一些基本信息。您可以让moble和桌面版本在不同的URL上发出请求,或发送不同的参数,或检查浏览器标题,有许多方法可以做到这一点。啊,这很有意义,谢谢您的回复ponse.我是否可以在mobile中捕获该布尔值?
以clojure编译器可以对其进行评估的方式?或者可能是解决该问题的另一种方式?我似乎能够判断用户是否在移动中的唯一方法是通过cljs使用js LIB,但我的所有路由都必须在clj中,因此让他们相互交谈另一个似乎是不可避免的(但也是常见的)问题。我认为您必须让客户端告诉服务器它是否是移动的。也就是说,这不是您的服务器在编译时的问题。但当客户端最终必须告诉服务器“嘿,为移动上的根路径页面加载此特定的html/css”如何在不遇到此问题的情况下将该值从客户端交换到服务器?抱歉,我可能误解了一些基本信息。您可以让移动版和桌面版在不同的URL上发出请求,或发送不同的参数,或检查浏览器头,有许多方法可以做到这一点。