3
私は、WebページにCodeMirrorを埋め込み、複数のコードスニペットを1つずつ編集しようとしています。このI行うにClojureScript:Reagentを使ってCodeMirrorを反応的に変更する方法
:
- は、コードスニペットのマップを含む1個の試薬原子
node-defs-atom
を持っています。 - もう1つのアトムを持つ
node-history-atom
スニペットのキーが含まれています。 - キーのコードマップの値にCodeMirrorの値を設定します。
は、ここでは動作しません何:CodeMirror内のテキストに何もしないreset!
とnode-history-atom
を変更
(defn editor [node-defs-atom node-history-atom]
(reagent/create-class
{:reagent-render (fn [] (do [:textarea
{ :value (@node-defs-atom (last @node-history-atom))
:auto-complete "off"}]))
:component-did-mount (editor-did-mount node-defs-atom node-history-atom)
}))
(defn editor-did-mount [node-defs-atom node-history-atom]
(fn [this]
(let [codemirror (.fromTextArea js/CodeMirror
(reagent/dom-node this)
#js {:mode "clojure"
:lineNumbers true})]
......)))
。私は本当に何がうまくいかないのかよく分かりません。
誰かが私がどこに参照を入れるべきか教えていただけたら、(@node-defs-atom (last @node-history-atom))
に感謝します。
ありがとうございます!
本当にありがとうございましたDOMノードにCMを追加しnction。私はこれを有効にすることができましたが、node-history-atomの値に基づいて反応的に起こるのではなく、テキストを変更するたびに.setValueを呼び出す必要がありました。このようにすることは可能ですか? – Boyentenbi
CodeMirrorはステートフルであり、想定するたびに作成したくないため、新しい値を割り当てるたびに.setValueを呼び出す必要があります。しかし、割り当ては '(.setValue @ text-atom)'マクロによって簡単に行えます。 – SerCe