【问题标题】:How to return JSObject from JSFunction?如何从 JSFunction 返回 JSObject?
【发布时间】:2017-02-04 05:29:58
【问题描述】:

我想从 FFI 函数定义中返回对 Javascript 对象的引用,以便以后能够操作该对象:

import           Data.Aeson
import           Foreign.JavaScript (JSObject, NewJSObject, unsafeCreateJSObject)
import           Foreign.RemotePtr (RemotePtr)
import           Graphics.UI.Threepenny.Core hiding (text)

mkJSObject :: JSFunction NewJSObject -> UI JSObject
mkJSObject f = askWindow >>= liftIO . flip unsafeCreateJSObject f

polyLine :: [[Double]] -> Value -> UI JSObject
polyLine points = mkJSObject . f points
  where
    f :: [[Double]] -> Value -> JSFunction NewJSObject
    f = ffi "L.polyline(%1, %2).addTo(map)"

但底层的 Javascript 窗口似乎无法公开访问。是否有其他方法可以创建对 Javascript 对象的引用?

【问题讨论】:

  • 这对我来说很好。在我看来,您已经回答了自己的问题?
  • 是的,但也许这个答案对其他人也有帮助。感谢您的三便士-gui 顺便说一句,设计精良且非常有用!
  • 当然。 :-) 但是你能把答案剪下来贴在下面吗?这会让其他人以后更容易理解。谢谢你,我很高兴你喜欢它。 :-)
  • 似乎没有选项可以回答我自己的问题,我可以添加 cmets。你能补充一下答案吗?谢谢!
  • 抱歉,算了,我没看到底部的蓝色大按钮;)

标签: haskell threepenny-gui


【解决方案1】:

实际上要简单得多:只需从 JSFunction 返回一个 JSObject,它就会被正确编组:

polyLine :: [[Double]] -> Value -> UI JSObject
polyLine points = callFunction . f points
  where
    f :: [[Double]] -> Value -> JSFunction JSObject
    f = ffi "L.polyline(%1, %2).addTo(map)"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    • 2011-06-01
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    相关资源
    最近更新 更多