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

Executing native functions/javascript as part of the view function

我正在尝试找到执行某些 javascript 作为我的视图函数的一部分的最佳方法。在视图函数中,我想创建一个 canvas 对象,然后执行一个本机函数,根据我的模型向其中插入一些数据。 dividual 中的部分似乎很容易编写,但我不确定如何将它们粘合在一起。

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

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

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