我正在尝试在Mac OSX上安装ghcjs-dom软件包.由于存在很多依赖关系,因此它很颠簸.Webkitgtk3是我目前的克星
cabal install ghcjs-dom
Resolving dependencies...
Configuring webkitgtk3-0.14.1.1...
Failed to install webkitgtk3-0.14.1.1
Build log ( /Users/markkaravan/.cabal/logs/webkitgtk3-0.14.1.1.log ):
[1 of 2] Compiling SetupWrapper ( /var/folders/br/4zwhphlx3816v87cc0bb5sxh0000gn/T/cabal-tmp-24401/webkitgtk3-0.14.1.1/SetupWrapper.hs, /var/folders/br/4zwhphlx3816v87cc0bb5sxh0000gn/T/cabal-tmp-24401/webkitgtk3-0.14.1.1/dist/setup/SetupWrapper.o )
[2 of 2] Compiling Main ( /var/folders/br/4zwhphlx3816v87cc0bb5sxh0000gn/T/cabal-tmp-24401/webkitgtk3-0.14.1.1/dist/setup/setup.hs, /var/folders/br/4zwhphlx3816v87cc0bb5sxh0000gn/T/cabal-tmp-24401/webkitgtk3-0.14.1.1/dist/setup/Main.o )
Linking /var/folders/br/4zwhphlx3816v87cc0bb5sxh0000gn/T/cabal-tmp-24401/webkitgtk3-0.14.1.1/dist/setup/setup ...
[1 of 2] Compiling Gtk2HsSetup ( Gtk2HsSetup.hs, dist/setup-wrapper/Gtk2HsSetup.o )
[2 of 2] Compiling Main ( SetupMain.hs, dist/setup-wrapper/Main.o )
Linking dist/setup-wrapper/setup ...
Configuring webkitgtk3-0.14.1.1...
setup: The pkg-config package 'webkitgtk-3.0' version >=1.8 is required but it
could not be found.
cabal: Error: some …Run Code Online (Sandbox Code Playgroud) 我正在尝试了解如何使用GHCJS-DOM创建GUI.我一直在看hello world示例https://github.com/ghcjs/ghcjs-dom-hello,这是微不足道的.添加新节点非常简单.我不能做的,并且无法从库文档(仅签名)中解决的是添加一些事件.例如,在鼠标单击时向主体添加新节点.
我希望避免使用像JQuery这样的JS库,因为我想通过GUI在GHC(webkit)和GHCJS之间移植.
最后,我希望能够将一个鼠标事件表达为FRP事件,但我会一次解决一个步骤.
如果有人有任何指导我会非常感激.我已经使用了haskell几年了,但这是我第一次进入DOM.
目标是window.addEventListener("popstate", ...从 GHCJS 代码调度的事件中触发。
GHCJS.DOM 不起作用
w <- currentWindowUnchecked
e <- newPopStateEvent "popstate" Nothing
dispatchEvent_ w e
Run Code Online (Sandbox Code Playgroud)
Language.Javascript.JSaddle 不起作用
e <- newPopStateEvent "popstate" Nothing
jsg "window" ^. jsf "dispatchEvent" (toJSVal e)
Run Code Online (Sandbox Code Playgroud)
FFI 不起作用
foreign import javascript unsafe "window.dispatchEvent($1)" dispatchIt :: JSVal -> JSM ()
e <- newPopStateEvent "popstate" Nothing
dispatchIt =<< toJSVal e
Run Code Online (Sandbox Code Playgroud)
这确实有效:
e <- newPopStateEvent "popstate" Nothing
w <- currentWindowUnchecked
jsg "console" ^. js2 "log" (toJSVal e) (toJSVal w)
Run Code Online (Sandbox Code Playgroud)
并产生有趣的结果
如您所见,JSVals 是正确的,我们可以在 …
我尝试安装reflex并reflex-dom使用cabal install以下错误消息:
$ cabal install reflex-dom
...
cabal: The following packages are likely to be broken by the reinstalls:
lens-4.15.1
ghcjs-0.2.0
free-4.12.4
kan-extensions-5.0.1
adjunctions-4.3
Use --force-reinstalls if you want to install anyway.
Run Code Online (Sandbox Code Playgroud)
ghcjsGitHub 上的“ master”分支上的版本为0.2.0,而名为“ dedupe”的分支上的版本为0.2.1。而且我也怕被打破lens。 有没有什么办法来安装 reflex 和 reflex-dom 在洽的方式? 也许我需要更改.cabal文件
$ cabal install reflex-dom
Resolving dependencies...
In order, the following would be installed:
bifunctors-5.3 (latest: 5.4.1) (via: reflex-dom-0.3 these-0.6.2.1 lens-4.13.2.1 free-4.12.4 semigroupoids-5.0.1 …Run Code Online (Sandbox Code Playgroud) 我目前正在 Haskell 中使用 GHCJS.DOM/JSDOM,目的是创建一个小型 Web 应用程序。为了捕获“单击按钮”事件,我编写了以下代码:
releaseAction <- on element click $ do
w <- currentWindowUnchecked
alert w "I was clicked!"
releaseAction
Run Code Online (Sandbox Code Playgroud)
(这是从页面https://hackage.haskell.org/package/jsaddle-dom-0.9.4.1/docs/JSDOM-EventM.html 中获取的示例);问题如下:如果我删除最后一行(所以我删除了 releaseAction),那么我可以根据需要多次单击“元素”,从而根据需要多次触发事件。另一方面,如果我不删除最后一行,则会取消该事件,从而阻止我触发单个事件。我的目标是让用户只单击一次“元素”,然后必须禁止此事件。我怎样才能胜任这份工作?谢谢。