Elm:您将如何构建和设计您的 UI?

Elm: How would you build and style your UI?

在过去的几天里,我学习了 Elm,这是一次令人耳目一新的体验。这么多,我不想回到 JS 领域,:-(。

我的问题是我仍然没有找到用 elm 制作网络应用程序的方法,我希望得到一些指导和建议:

evancz/start-app 非常适合组织应用程序的结构。
evancz/effects together with elmfire can handle talking to Firebase.

但是我将如何构建和设置 UI 的样式?
举个具体的例子:a styled select widget from Semantic-UI.
它被实现为 div 列表,以及一些 JS 来处理下拉列表和 multi-select.

目前我找到的备选方案是:

  1. 包括 Semantic 的 CSS 和 JS(它需要 JQuery)并使用 ports 挂接到小部件的 JS 事件。
  2. 仅包括语义的 CSS 并尝试在 Elm 中构建功能。
  3. 两者都在 Elm 中构建功能和样式 (adam-r-kowalski/Elm-Css)
  4. 忘记语义并使用 circuithub/elm-bootstrap-html.
  5. 在 Bootstrap 中重做站点

是否还有我遗漏的其他替代品或可重复使用的小部件?

TheSeamau5/TabbedPages 容器确实令人生畏。 其他小部件需要这么多工作吗?

同样,我很想在我的项目中使用 Elm,但我没有知识也没有时间自己编写所有小部件。

对于上下文,我使用的 Semantic 小部件是:

再次感谢您为 Elm 所做的工作,以及您可以给我的任何建议。

PS: 我也在elm的邮件列表中发布了这个问题。

首先,作为 TabbedPages 容器的作者,对于复杂性,我深表歉意。该组件实际上是一个实验,旨在了解使用 Elm 和 Elm 架构以及内联样式的可能性。简而言之,该组件的想法是允许选项卡+可滑动页面组件,其中选项卡和页面的内容都是未知的,并且整个内容都使用内联样式进行样式设置。这可能是制作组件最困难的路线,尽管它有其优点。

至于实现小部件,请将 Elm 视为一种创作方式 Html(就像一个超级高级的 Jade)。这意味着您可以只写 html 并给每个 div 一些 类 并在 CSS 中设置 类 的样式(或您选择的任何预处理程序)。这意味着,不,您的小部件不需要像 TabbedPages 那样多的工作。

最好的做法可能是包含 CSS 并可能在 Elm 中重做 JS 部分。这将为您提供 Elm 的许多保证,而无需为组件的工作付出太多成本。

至于野外的组件,不幸的是目前 Elm 还很年轻,所以目前还没有很多。将来可能会改变,但目前情况并非如此。

最后,对于汉堡包菜单,Elm 中有两个很棒的包可以提供 svg 图标

  1. TheSeamau5/elm-material-icons
  2. jystic/elm-font-awesome

两者之间大约有不到 1000 个图标可供选择(我想,我还没有真正数过),它们只是功能,因此非常易于使用。它们生成 Svg 这只是 Html 类型的另一个名称,因此您可以互换使用两者。

简而言之,目前最好的方法是在 Elm 中编写 html 和逻辑,在 CSS(或 Sass/Less/Stylus/etc...)中编写样式。你的大部分逻辑只是切换 div 中的 类,就像 jQuery.

为此,我建议遵循 Elm 架构:

init : Options -> Model

update : Action -> Model -> Model
-- or update : Action -> Model -> (Model, Effects Action) 
-- if you need effects like http

view : Address Action -> Model -> Html

关于行内样式,暂时不用太担心。这是一项正在进行的工作,并且在 space(如 elm-css)中正在发生许多突破,并且当人们开始掌握它时,您可能会开始看到一些博客文章和组件出现。 (不幸的是,这就是当你修补尖端时会发生的事情......虽然,如果你想加入发现的乐趣,Elm 社区非常热情而且非常有趣,因为似乎每个人都在一起学习:D)

我也想知道这个问题,关于使用 Bootstrap 你可以使用 CSS 类 但这会变得混乱。

最后你将编写单独的 CSS 文件并使用 LESS 或 SASS 或 Stylus 或编译为 CSS.

的其他语言

所以在你的 Elm 代码中,使用 CSS 类:

div [ class "whatever" ] [ text "Hello world" ]

我会使用端口来包装外部 JS 组件。

我知道很久以前就有人回答了这个问题,但我想我应该为 Elm 0.17 和 0.18 添加 0.02 美元。查看 Material Design Lite components, for 0.17, and forked for 0.18

Live Demo site 圆滑而详尽。