在Elm中封装嵌套的组件端口通信?

时间:2016-05-30 22:15:48

标签: javascript elm

我有一个可重用的Elm组件,可以在多个地方重用(以guide tutorial的样式。我有一个Javascript函数,我希望通过端口与之通信,但创建一个端口订阅导致我的组件的每个"实例"接收我从Javascript发回的每条消息。

理想情况下,父组件不应该超出通常的Cmd.map ChildMsg进行任何过滤。我能想到的最简单的解决方案是为每个子模型添加一个ID,并过滤掉孩子自己的更新功能,但这有点不幸,如果一个人不这样做,我需要制作一个ID。已经存在了。

作为我理想结果的一个示例,Http模块允许您返回任务并返回结果,仅针对请求它的特定实例。我设法使用简单的Native模块来模拟此行为:https://github.com/tgecho/elm-custom-task-example

function getNumber(number) {
    return _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) {
            return callback(_elm_lang$core$Native_Scheduler.succeed(number));
    });
}

然后我的组件可以通过返回任务Task.perform NaN Increment (Number.getNumber 1)来调用此函数,并将结果作为Increment消息返回。

我错过了什么?有没有办法封装端口通信而无需编写Native 代码或向所有内容添加ID?

0 个答案:

没有答案