4

我正在阅读flow down并假设让我们在我们的网站上垂直堆叠元素。当您的网站的某些部分是信号时,您应该怎么做?我会画一个这样的网站:

  • 介绍
  • 动态组件
  • 更多静态文本

所以flow down: [Element] -> Element我不能随心所欲地混合[signal Element]。在以前的解决方案中,我看到了涉及lift的解决方案,这就是我想出的:

import Random
main = column <~ (constant "5") ~ (Random.range 0 100 (every second))
column x y = flow down [asText x, asText y]

在这里,我只是将数字 5 堆叠在一个随机变化的数字之上。也许这取决于窗口大小,

import Random
import Window

main = column <~ (constant "5") ~ Window.dimensions
column x y = flow down [asText x, asText y]

这被认为是好的做法还是有更好的方法在 Elm 中进行布局?

4

2 回答 2

2

提取非信号函数并提升它通常是一种很好的做法。在这种情况下,如果您愿意,您也可以使用Signal.Extra.combine : [Signal a] -> Signal [a]

main = flow down <~ combine [constant (asText "5"), asText <~ Window.dimensions]

正如您所看到的,与您的解决方案相比,要进行的提升要多得多,只是为了将其纳入单线。所以我认为这并不理想。但combine在其他(更动态的)情况下可以派上用场。

完全披露:我是我链接到的库函数的作者。

于 2014-07-26T09:47:24.217 回答
1

最新答案。要么使用 combine,它现在位于 Signal-extra 库中,要么对于这个简单的案例

 column x y = 
    Signal.map (flow down) <|
      Signal.map2 (\a b -> [a, b]) (show x) (show y)
于 2015-11-18T21:14:50.747 回答