首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GHCJS事件指南

GHCJS事件指南
EN

Stack Overflow用户
提问于 2014-09-18 19:46:16
回答 1查看 737关注 0票数 8

我试图了解如何使用GHCJS创建GUI。我一直在看hello示例https://github.com/ghcjs/ghcjs-dom-hello,这很简单。添加新节点很简单。我不能,也不能从库文档(只有签名)中计算出的是添加一些事件。例如,在鼠标单击时向主体添加一个新节点。

我希望避免使用像JQuery这样的JS库,因为我希望by GUI能够在GHC (webkit)和GHCJS之间进行移植。

最终,我希望能够将鼠标事件表达为玻璃钢事件,但我会一步一步地满足。

如果有人有指导的话,我会非常感激的。我已经使用haskell几年了,但这是我第一次涉足DOM。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-21 14:21:12

您可以从包括莫兹拉在内的许多地方获得有关DOM的信息。下面是一个示例,它为文档体上的单击事件添加了一个事件处理程序.

代码语言:javascript
复制
module Main (
    main
) where

import Control.Applicative ((<$>))
import Control.Monad.Trans (liftIO)
import GHCJS.DOM
       (enableInspector, webViewGetDomDocument, runWebGUI)
import GHCJS.DOM.Document (documentGetBody, documentCreateElement)
import GHCJS.DOM.HTMLElement (htmlElementSetInnerHTML, htmlElementSetInnerText)
import GHCJS.DOM.Element (elementOnclick)
import GHCJS.DOM.HTMLParagraphElement
       (castToHTMLParagraphElement)
import GHCJS.DOM.Node (nodeAppendChild)
import GHCJS.DOM.EventM (mouseClientXY)

main = runWebGUI $ \ webView -> do
    enableInspector webView
    Just doc <- webViewGetDomDocument webView
    Just body <- documentGetBody doc
    htmlElementSetInnerHTML body "<h1>Hello World</h1>"
    elementOnclick body $ do
        (x, y) <- mouseClientXY
        liftIO $ do
            Just newParagraph <- fmap castToHTMLParagraphElement <$> documentCreateElement doc "p"
            htmlElementSetInnerText newParagraph $ "Click " ++ show (x, y)
            nodeAppendChild body (Just newParagraph)
            return ()
    return ()
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25921144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档