1
我使用AngularJS資源基本上$ .ajax()某些表單數據。Clojure中的奇怪布爾行爲與表單數據中的複選框
Post.put({user:$scope.getLoggedInUser(), action:"new"},{body:$scope.postBody, "public":$scope.postPublic}, function(post) {
表格上是名爲「public」的複選框。
我使用這個功能合併從URL中PARAMS表單數據:
(defn get-params [request]
(merge (:params request) (parse-string (slurp (request :body)) true)))
,當我從我的路由的處理程序調用println像這樣我得到一個不錯的true
當複選框被選中:
(println (:public (get-params request)))
但是,當我將參數(即不是println)傳遞給我的控制器中與數據庫交談的另一個函數時,我在該函數的開始處執行了另一個println,並取而代之爲nil
。
我試圖把它當作
(read-string x)
(boolean (Boolean/valueOf x))
(Boolean/valueOf x)
無濟於事。
一兩件事,可能會導致它(但我不知道爲什麼),是我在包裝這樣通過認證的要求:凡(create)
功能在數據庫中創建一個記錄
(auth? request #(create x y z))
。
無論我嘗試過什麼,我都無法得到它true
。
編輯:更完整的代碼
控制器
(defn auth? [request callback-true & [callback-false]]
(println (callback-true))
(let [login-response (auth/login request)]
(if (and (not (string? login-response))
login-response)
(callback-true)
(if callback-false
(callback-false)
(json-response (str "{\"auth\":" login-response "}"), 401)))))
(defn create [user logged-in-user body public?]
(if (= logged-in-user user)
(json-response (post-view/single-post (post/create user body public?)))
(json-response "{\"auth\":\"can't create post under different logged in user\"}" 401)))
(defroutes routes
....
(PUT "/api/:user/new" request
(println request)
(auth? request
#(create (:user (request :params))
(:user (request :session))
(:body (get-params request))
(:public (get-params request)))))
....
)
模型
(defn create [username body public?]
(println public?)
(when-not (and
(str/blank? body)
(str/blank? username))
(let [user-id (:id (get-id-from-username username))
new-post-id
(:id
(sql/with-connection db
(sql/insert-values :post
[:usr_id :body :public] [user-id body (Boolean/valueOf public?)])))]
(by-id new-post-id))))
'(request:body)'是一個流對象。 Sl it它一次讀取流直到結束,下次沒有什麼可讀的 – Ankur 2013-02-18 04:31:36
這正是發生了什麼事 – tjb1982 2013-02-18 14:34:33