私common.cljcファイルには、次のようになります。値は常にnull
(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}))
mobile-value
を正しく評価します.cljcファイル内のページ、さらには別の.cljsファイルにもあります。
mobile-value
がroutes.cljで評価されるときに問題が発生するのはnullだけです。したがって、d-or-v-version
のifステートメントは、別のviews.cljファイルから正しいhiccup htmlを呼び出さない。
mobile-value
は値がないのに対し、routes.cljはcommon.cljcより前に実行されるため、mobile-value
はnullを返すと仮定しています。しかし、私はこれを解決する方法は考えていない、どんな助けも認められるだろう。
ああ、意味があり、応答に感謝します。とにかく 'mobile 'にブール値を捕まえることができるのですか?それはclojureコンパイラが評価できる方法ですか?あるいは、問題を解決するための別の方法でしょうか? ユーザーがモバイルであるかどうかを判断できる唯一の方法は、cljを使ってjs libsを使用することですが、すべてのルートはcljになければなりませんので、お互いに話をするのは避けられないようですまた一般的な)問題です。 – user2176152
私はそれがモバイルかどうか、クライアントがサーバーに伝える必要があると思います。つまり、サーバーのコンパイル時の問題ではありません。 – Bill
しかし、そのクライアントが最終的にサーバーに「この特定のhtml/cssをモバイル上のルートパスページにロードする」必要がある場合は、この問題にぶつかることなくクライアントからサーバーにその値をどのように交換すればよいでしょうか?申し訳ありませんが、何か基本的なことを誤解しているかもしれません。 – user2176152