我尝试使用静态代码编辑器purescript-pux
和CodeMirror编写应用程序。
CodeMirror使用text-area
编辑,但事件的处理方式不同,因此我无法使用onChange
中的Pux.Html.Events
函数。
要在CodeMirror编辑器中处理输入更改,应该这样做:
CodemirrorInstance.on('change',function(cMirror){
// get value right from instance
var newValue = cMirror.getValue();
});
我能够制作一个微不足道的Codemirror实例。我遇到的问题是如何让pux
知道这些事件。
我有一个Channel
我已订阅并用于处理websocket消息,但我真的不知道如何从外国JavaScript文件中发送一些东西。
答案 0 :(得分:0)
您可能只需在外部模块上设置信号(purescript-signal)。
也许是这样的:
// type it, read the CodeMirror Docs.
type CMChange =
{ from :: CMCoordinate
to :: CMCoordinate
text :: Array String
removed :: String
origin :: ??
}
foreign import _CMChangeSignal :: forall eff change. (change -> Signal change) -> Eff (dom :: DOM | eff) (Signal CMChange)
cmChanged :: forall eff. Eff (dom :: DOM | eff) (Signal CMChange)
cmChanged = _CMChangeSignal constant
main :: Eff (CoreEffects (dom :: DOM)) Unit
main = do
urlSignal <- sampleUrl
let routeSignal = urlSignal ~> (PageView <<< match)
-- create signal then map it to your Action
cmSignal <- cmChanged
let cmChangeSignal = cmSignal ~> CodeMirrorChangedAction
app <- start
{ initialState: init
, update: update
, view: view
, inputs: [routeSignal, cmChangeSignal]
}
renderToDOM "#app" app.html
然后在你的purescript文件上:
constant
boost::edge_weight_t EdgeWeightPropType;
是Pux所依赖的“purescript-signal”中定义的函数。