1

後でオブジェクトを操作できるようにするために、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 Window は一般公開されていないようです。Javascript オブジェクトへの参照を作成する別の方法はありますか?

4

1 に答える 1

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)"
于 2016-09-29T19:07:59.747 に答える