执行本机函数/ javascript作为视图函数的一部分

时间:2016-02-12 09:21:26

标签: elm

我正在尝试找到执行某些javascript的最佳方式,作为我的视图功能的一部分。在view函数中,我想创建一个canvas对象,然后执行一个本机函数,根据我的模型将一些数据插入其中。单独的部件似乎很容易写,但我不知道如何将它们粘在一起。

如果我只是将原生调用插入到我的视图代码中,可能必须生成一些HTML(例如空div)以满足类型系统;也许这是正确的事情,但感觉有点hackish。有更好,更惯用的方式吗?我是否以正确的Elm-ish方式思考这个问题?

1 个答案:

答案 0 :(得分:1)

我找到的最好的方法是在主模块中为此创建一个邮箱:

messageMailbox : Signal.Mailbox String
messageMailbox =
    Signal.mailbox ""

然后创建一个端口来侦听来自该邮箱的信号:

port messsagePort : Signal String
port messsagePort =
    messageMailbox.signal

在Js中,您订阅了此端口:

app.ports.messsagePort.subscribe(function (args) {
    ...
})

然后从您的视图或更新功能向此邮箱发送消息(作为更新时的效果):

Signal.send messageMailbox.address message