如何使用cljs-ajax在post请求后加载cljs中的另一个页面

时间:2016-01-09 16:53:45

标签: clojure clojurescript

我创建了一个登录页面login.cljs和handler.clj.here是我的代码 login.cljs: -

 (defn handler [response]
  (let[status (aget (clj->js response) "status")
   msg (str (aget (clj->js response) "greeting"))]
   (if (= status 200)
    (home/home-root)
    (js/alert "Invalid username or password"))
   ))
 (defn handle-submit [e app owner]
  (let [[user user-node] (value-from-node owner "username")
        [pass pass-node] (value-from-node owner "password")]
  (POST "/hello"
     {:params {:username user :password pass}
     :handler handler
     :error-handler error-handler
     :format :json
     :response-format :json})
   ))

(defn login-view [app owner]
  (reify
    om/IRender(render [this]
     (dom/div nil
      (dom/h1 nil "Login")
       (dom/input #js {:type "text" :placeholder "Your Name" :ref "username"})
       (dom/input #js {:type "password" :placeholder "Your Password" :ref "password"})
       (dom/button
             #js { :onClick (fn [event] (handle-submit event app owner))}
             "submit")
    ))))
(defn say-hello []
 (om/root
 {} login-view (.getElementById js/document "content")))

home.cljs: -

(defn home-view [app owner]
    (reify
      om/IRender
      (render [this]
        (dom/div nil "Welcome"
  ))))
(defn home-root []
  (om/root
  {}
  home-view
  (.getElementById js/document "content"))

handler.clj: -

(defn login-check! [request]
  (let [user (get-in request [:params :username])
    pass (get-in request [:params :password])]
   (cond
    (and(= user "admin")(= pass "admin")) (response/response {:greeting user
                     :status 200})
   :else (response/response {:greeting "Invalid username or password"
                          :status 403}))
  ))

 (defroutes app-routes
  (GET "/" [] (response/resource-response "index.html" {:root "public"}))
  (route/resources "/")
  (POST "/hello" request (login-check! request))
  (GET "/home" request (response/response {:body "home"}))
  (route/not-found "Not Found"))

我需要在有效登录时加载主页视图。 在这里,我打电话给另一个cljs方法' home / home-root'但它不起作用。

1 个答案:

答案 0 :(得分:1)

在这里,我得到了一个解决方案......我不知道它的正确程度,但它的工作性能 我使用试剂创建了一个新的定义页面,如下所示: -

 (defn page [page-component]
       (reagent/render-component [page-component] 
                             (.getElementById js/document "content")))

并从login.cljs处理程序方法调用此函数:

 (defn handler [response]
      (page home-root))

现在将调用页面方法并将home-root cljs传递给它。