我正在尝试使用端口将数据从Elm 0.19发送到JavaScript。
编辑:问题似乎与使用elm应用程序运行/构建有关
在 Elm 中,我声明了一个传出端口:
port modelToJs : Json.Encode.Value -> Cmd msg
我在 update
函数中使用它来生成一个将 JSON 编码值发送到 JavaScript 的Cmd
。
在JS中,我实例化了Elm应用程序:
const app = Elm.Main.init({
node: document.getElementById('root')
});
并注册数据处理程序:
app.ports.modelToJs.subscribe(function dataHandler(data) {
console.log("got from Elm:" + data);
});
调用modelToJs
时,数据不会发送和打印到控制台。相反,我收到以下JavasScript运行时错误(Elm声称通过设计避免(:
TypeError: currentSubs[i] is not a function
var value = _Json_unwrap(converter(cmdList.a));
2160 | for (var i = 0; i < currentSubs.length; i++)
2161 | {
> 2162 | currentSubs[i](value);
2163 | }
2164 | }
2165 | return init;
我还在GitHub上提供了一个完整的概念验证项目:https://github.com/mpgirro/elm0.19-ports-issue
该存储库还包含错误消息的图像(sry,我缺乏发布图像的声誉(
错误似乎在 dataHandler.js
中。 它目前包含以下内容:
function dataHandler(data) {
console.log("got from Elm:" + data);
}
如果将函数声明为 export default
则问题消失:
export default function dataHandler(data) {
console.log("got from Elm:" + data);
}