私は 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 に切り替える必要があります。
どうすればいいですか?