Architecture 具有相关模型的elm模块的体系结构

Architecture 具有相关模型的elm模块的体系结构,architecture,elm,Architecture,Elm,我目前正在深入研究elm,并无意中发现了以下问题: 我有两个舱,绝地舱和机器人舱。 绝地可以储存绝地的,机器人可以储存机器人。 我通过elm架构方法将这两个模块集成到一个主模块中。 现在有人告诉我每个机器人都是绝地所有的,我不知道这是不是真的。所以我想给机器人模块添加一个选择框,这样我就可以给绝地武士分配一个机器人。 可供分配的绝地武士应取自绝地武士模型 我的第一个想法是:哦,太好了,我只是把主模块导入机器人模块,然后试着解救我的绝地武士。 但这不起作用,因为模块依赖关系是循环的 接下来我想:我

我目前正在深入研究elm,并无意中发现了以下问题:

我有两个舱,绝地舱和机器人舱。 绝地可以储存绝地的,机器人可以储存机器人。 我通过elm架构方法将这两个模块集成到一个主模块中。 现在有人告诉我每个机器人都是绝地所有的,我不知道这是不是真的。所以我想给机器人模块添加一个选择框,这样我就可以给绝地武士分配一个机器人。 可供分配的绝地武士应取自绝地武士模型

我的第一个想法是:哦,太好了,我只是把主模块导入机器人模块,然后试着解救我的绝地武士。 但这不起作用,因为模块依赖关系是循环的

接下来我想:我把绝地模型导入机器人模型,并用它来增强我的机器人模型——这样我就可以把我的绝地放入机器人所有者的选择框中。但这也不起作用。当我更新绝地名单时,我的机器人模块中没有逻辑效果,因为绝地生成的信息会向上弹出到main。Main识别它们并更新主模块。但机器人模型永远无法识别绝地舱的更新

因此,我认为我必须了解elm架构的更多基础知识。我想我破坏了整个榆树建筑

有人能解释一下这应该如何正确实现吗?我认为在开始开发更大的应用程序之前,这是一个需要理解的基本问题

这里是截图。您可以将这些组件的模型视为每个组件下面的字符串

如果您能提供一些意见或提示,或者在哪里阅读更多有关。。。谢谢:-

更新

我有三个文件的要点:
从Main.view将model.jedis传递给Droids.view。您必须修改Droids.view以接受List Jedi的附加参数。关于核心Elm函数的文档可能会令人困惑。它们都有一个默认签名,即

view : Model -> Html Msg
但这只是最基本的签名。对于本例,将其修改为

view : List Jedi -> Model -> Html Msg
现在你有了最新的绝地武士名单 就模块引用而言,您可以这样做

import Jedi exposing (Jedi)

从Droid模块将model.jedis从Main.view传递到Droids.view。您必须修改Droids.view以接受List Jedi的附加参数。关于核心Elm函数的文档可能会令人困惑。它们都有一个默认签名,即

view : Model -> Html Msg
但这只是最基本的签名。对于本例,将其修改为

view : List Jedi -> Model -> Html Msg
现在你有了最新的绝地武士名单 就模块引用而言,您可以这样做

import Jedi exposing (Jedi)

从Droid模块

可以在任何地方共享您的代码,例如Github?听上去,您正在使每个模块成为自己的一个小Elm应用程序,具有自己的更新功能、模型、视图等,并使用Main将它们组合起来。Elm体系结构实际上建议对整个应用程序使用一个更新功能、一个模型等。通过生成返回Html/Html Msg的函数来将事物分解为组件,您可以使用这些函数来构建主视图-这样绝地武士和机器人就不需要使用彼此的更新函数,所有东西都将共享一个。我将浏览一下@Freshyeball的工作坊0.17。。。“它有您正在寻找的依赖项。@RyanPlant谢谢您的评论。是的,我就是这么做的。我认为或理解这样的概念,事实上每个模块都有MUV。在视图函数中分解组件似乎有问题。因为函数是Model->Html Msg。如果我在一个单独的文件中定义这样一个函数,编译器会问我模型在哪里。由于模型是在main中定义的,因此我必须导入main.model。但这会产生循环。我可以通过删除类型注释来消除编译器错误。但这不是很优雅。榆树是完美的,但我的脑子里有个结this@marschro:您可以在一个特殊文件中定义您的类型模型和消息,该文件将同时导入视图文件和主文件。您可以在任何地方共享您的代码吗?听上去,您正在使每个模块成为自己的一个小Elm应用程序,具有自己的更新功能、模型、视图等,并使用Main将它们组合起来。Elm体系结构实际上建议对整个应用程序使用一个更新功能、一个模型等。通过生成返回Html/Html Msg的函数来将事物分解为组件,您可以使用这些函数来构建主视图-这样绝地武士和机器人就不需要使用彼此的更新函数,所有东西都将共享一个。我将浏览一下@Freshyeball的工作坊0.17。。。“它有您正在寻找的依赖项。@RyanPlant谢谢您的评论。是的,我就是这么做的。我认为或理解这样的概念,事实上每个模块都有MUV。在视图函数中分解组件似乎有问题。因为函数是Model->Html Msg。如果我定义
在一个单独的文件中这样一个函数,编译器会问我模型在哪里。由于模型是在main中定义的,因此我必须导入main.model。但这会产生循环。我可以通过删除类型注释来消除编译器错误。但这不是很优雅。榆树是完美的,但我的脑子里有个结this@marschro:您可以在一个特殊的文件中定义您的类型Model和Msg,该文件将同时导入视图文件和主文件。很好的提示。谢谢为了满足我的需要,我重新设计了我的应用程序,目前使用的方法是詹姆斯·摩尔在《好提示》中建议的方法。谢谢为了满足我的需要,我重新设计了我的应用程序,目前使用的方法是詹姆斯·摩尔(James Moore)建议的方法