首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >事件处理程序和Haste中的事件

事件处理程序和Haste中的事件
EN

Stack Overflow用户
提问于 2014-08-05 22:17:28
回答 2查看 173关注 0票数 2

我正在测试哈斯特编译器,我需要访问事件和/或原始元素,但是Event类型没有提供这些信息。

我试着用下面的函数做一个ffi回调,但是它返回给回调的‘事件’还没有定义。我做错了什么,还是有更好的方法使用内置功能?

代码语言:javascript
复制
newtype EventCB = EventCB (JSAny -> IO ())

manualEvent :: Elem -> String -> (JSAny -> IO ()) -> IO ()
manualEvent e evt act = do
  f <- toCallback $ \evt' -> act evt'
  go e evt (EventCB f)
  where go = ffi $ toJSString "(function(e, evt, cb) {e.addEventListener(evt, cb);})"
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-22 12:26:30

我刚刚验证了它是否适用于click事件:

代码语言:javascript
复制
listen :: JSType event => Elem -> event -> a -> IO Bool
listen e event f= jsSetCB e (toJSString event) (mkCallback $! f)

代码语言:javascript
复制
 listen  element  "click"   doit

和类型的:

代码语言:javascript
复制
 doit :: Int -> (Int,Int) -> IO ()

使用鲈鱼库:

代码语言:javascript
复制
doit i (x,y)  = do
  body <- getBody
  (flip build) body $ do
     p i
     p (x,y)

  return()

听着不安全。必须确保事件处理程序具有正确的参数类型。已知事件的类型是onEvent中使用的类型

票数 2
EN

Stack Overflow用户

发布于 2014-08-09 04:08:27

为什么不让回调函数对事件使用读取器单点呢?格杰斯有一个连接函数来实现这一点。看起来像这样..。

代码语言:javascript
复制
connect :: (GObjectClass t, IsEvent e, ToDOMString string) => string -> t -> EventM e t () -> IO (IO ())
connect eventName target callback =
  eventTargetAddEventListener target eventName False $ curry (runReaderT callback)

返回的IO操作可用于在不再需要事件侦听器时删除事件侦听器。eventTargetAddEventListener对ghcjs和webkitgtk都是实施 (因此它在本地Haskell应用程序中的工作性能与编译到JavaScript的应用程序一样好)。

如果你有时间,请给ghcjs一个机会。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25149267

复制
相关文章

相似问题

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