2016-06-10 76 views
2

從重新框架開始,並有一個(可能非常基本)的困惑點。重新框架:訂閱不按預期工作

我有一個訂閱:

(defn get-vote-by-id 
    [votes id] 
    (filterv #(= (:id %) id) votes)) 

(register-sub 
:cvs 
(fn cvs-sub [db [_]] 
    (make-reaction 
    (fn cvs-sub-reaction [] 
     (let [cv (get-in @db [:current-vote]) 
      votes (get-in @db [:votes])] 
     ;; why is this evaluating to []? 
     (get-vote-by-id votes cv)))))) 
通過使用

本表格-2部分:

(defn vote-page [] 
    (let [ready? (subscribe [:current-vote-initialised?]) 
     current-vote-id (subscribe [:current-vote-id-sub]) 
     cv (subscribe [:cvs])] 
    (fn vote-page-renderer [] 
     [:div 
     [:h2 "Vote"] 
     (if @ready? 
     (do 
      [:div 
      [:div (str "cv: " @cv)] 
      [:div (str "Current Vote id: " @current-vote-id)]]) 
     [:div "Initialising..."])]))) 

我的應用程序,數據庫擁有有效數據,{:票......是圖的矢量,每張地圖都有一個:id參數,{:current-vote是一個數字。

我知道,得到票,由-ID的工作原理:

(get-vote-by-id [{:id 1 :data "hi"} {:id 2 :data "there"}] 2) 
[{:id 2, :data "there"}] 

如果我在替代品種具有恆定(得到票按編號票CV):(得到票,由-id票2),那麼它的作品。但是,否則,(得票 - 由ID ...)正在評估一個空向量[]。

任何幫助表示感謝,並提前致謝!

這表明得到票按ID傳遞正確的值(向量票號ID):

get-vote-by-id

+0

你可以打印出'cv'和'votes'在'get-vote-by-id'調用之前嗎? –

+0

當然 - 我在上面添加了一個截圖。這表明,獲得投票的ID是通過一個向量(3個元素,每個地圖)投票和一個數字(在這種情況下爲1)的ID。 – user1974767

+0

令人困惑的是 - 它可以看出 - 是返回一個空矢量。當從repl調用get-vote-by-id時,具有相同的值,它的行爲與預期相同(返回包含我想要的單個地圖元素的矢量)。 – user1974767

回答

2

一些調試後,我們發現,問題是進一步上行。根本原因是id被設置爲一個字符串。強制id爲一個整數解決了這個問題。

+0

非常好 - 非常感謝Daniel – user1974767