0

私は Om で遊んでみようとしています (はい、om.next が来ることは知っていますが、いつ準備ができるかは明らかではありません。基本的な考え方は適用されると思います)。 ) 問題。

app-state の「エフェクト」メンバーから生成される選択ウィジェットと、そのエフェクトを下流に送信するボタン (LED ストリップを制御する) を含むコンポーネントがあります。

(defn effect-view [data owner]
  (reify
    om/IInitState
    (init-state [_]
      {:selected-effect nil})
    om/IRenderState
    (render-state [this state]
      (dom/div {}
               (dom/select #js {:id "effect"
                                :value (:selected-effect state)
                                :onChange #(handle-change % owner state)}
                           (for [effect (:effects data)]
                             (dom/option {:react-key (:name effect)} (:name effect))))
               (dom/button #js {:id "send-effect"
                                :onClick (fn [e]
                                           (queue-command "effect" (:selected-effect state)))
                                :react-key "send-effect"}
                           (str "Send Effect"))))))

これまでのところ、実際には良好です。これは主に機能します。app-state が (REST 呼び出しを介して) :effects で設定されている場合、これは実際にオプションを埋めます。

問題はその厄介な:selected-effect州のメンバーです。最初は nil ですが、select 要素が入力されると、セレクターは最初の要素を表示します。したがって、ユーザーが「Send Effect」ボタンをクリックすると、最初の効果を取得するのではなく、「nil」が送信されます。これは、「オプション」の子が正しく入力されているが、ビュー ステートが変更されていないためです。

グローバル状態でエフェクト リストを変更するとき:selected-effect、現在の値が有効でない場合 (つまり、でnil、効果A、B、およびCを入力します-選択した値を「A」に変更する必要があります...次に効果A、C、およびDを入力すると、Aのままになりますが、 B、C、D、それが理にかなっていれば、B に切り替える必要があります。

どうすればいいですか?

4

1 に答える 1