3
我試圖在我的網頁中嵌入一個CodeMirror來編輯幾個代碼片段,一次一個。ClojureScript:如何更改CodeMirror與試劑反應
爲此I:
- 有一個試劑原子
node-defs-atom
包含地圖上的代碼片段。 - 有另一個原子
node-history-atom
其中包含正在查看的片段的鍵 - 將CodeMirror的值設置爲密鑰中的代碼映射的值。
這裏是行不通:
(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-history-atom
與reset!
沒有做任何事情在CodeMirror文本。我真的不確定發生了什麼問題。
如果有人可以告訴我應該在哪裏提及(@node-defs-atom (last @node-history-atom))
,我會非常感激。
提前致謝!
非常感謝;我已經設法實現了這個功能,但是每次我想要改變文本時,我都必須寫一個對.setValue的調用,而不是基於node-history-atom的值進行反應。是否有可能以這種方式發生? – Boyentenbi
每次你想分配一個新的值時,你必須調用.setValue,因爲CodeMirror是有狀態的,並且你不想每次我想它都創建它。但是可以通過'(reagent.ratom/run!(.setValue @ text-atom))'宏輕鬆完成分配。 – SerCe