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))))))

この Form-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..."])])))

私の app-db には有効なデータがあります。{:votes ... はマップのベクトルで、各マップには :id パラメータがあり、{:current-vote は数値です。

get-vote-by-id が機能することはわかっています。

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

そして、cv in (get-vote-by-id votes cv) を定数 (get-vote-by-id votes 2) に置き換えると、機能します。しかし、それ以外の場合、(get-vote-by-id ...) は空のベクトル [] に評価されます。

どんな助けでも感謝します、そして前もって感謝します!

これは、get-vote-by-id に正しい値が渡されることを示しています (投票のベクトルと ID の数値)。

ID による投票

4

1 に答える 1

2

いくつかのデバッグの後、問題はさらに上流にあることがわかりました。根本的な原因はid、文字列に設定されていたことです。整数idに強制することで問題が解決しました。

于 2016-06-12T22:13:10.123 に答える