排序(并行)Outwatch中的可观察量(或压缩)

时间:2018-01-04 17:19:21

标签: scala.js rx-scala outwatch

如何在Outwatch中呈现 Observables 列表?如果我需要一个Observable怎么办:如何将它们作为一个应用程序进行排序/压缩?当我使用适用的(?)操作' zip'将List [Observable]转换为Observable [List]? (即当我不需要Observables被链接时)

val literals:Seq[Observable[VNode]] = handlers.map { i => i.map(li(_)) }
return div(ol( children <-- Observable.zip[VNode, Seq[VNode]](literals)(identity) ))

下面有一个答案

div(ol(
    (for (item <- literals) yield { child <-- item} ):_*))

只有在用户输入每个输入后才会呈现任何一个孩子。如何在用户输入任何第一个输入时立即呈现每个孩子,而不必全部输入?

完整代码如下

import outwatch.dom._
import rxscalajs.Observable
import scala.scalajs.js.JSApp

object Outwatchstarter extends JSApp {
  def createInputMappedToStringHandler(s:Handler[String]) = input(inputString --> s)

  def main(): Unit = {
    val root = {
      val names = (0 until 2).map(_.toString) // when 0 until 1, this emits
      val handlers: Seq[Handler[String]] = names.map(name => createStringHandler())
      val inputNodes = handlers.map(createInputMappedToStringHandler)
      val notworkingformorethan1 = {
        val literals = handlers.map { i => i.map(li(_)) }
        val y: Observable[Seq[VNode]] = Observable.zip[VNode, Seq[VNode]](literals)(identity)
        div(ol(
          children <-- y
        ))
      }
      val list = List("What", "Is", "Up?").map(s => li(s))
      val lists = Observable.just(list)
      val workingList = ul(children <-- lists)

      div(
        div(inputNodes: _*),
        workingList,
        notworkingformorethan1)
    }
    OutWatch.render("#app", root)
  }
}

列表长度&gt; 1时没有显示,但是使用单元素列表。我是一个html / scala-js和rx noob。并且可能误解Observable可能(或可能不)是应用函子。我一直在寻找&#39;序列&#39;而不是&#39; zip&#39;。

完整代码的屏幕截图

screenshot from full code

1 个答案:

答案 0 :(得分:0)

OutWatch DOM DSL中的For-comprehensions工作

div(ol(
    (for (item <- literals) yield { child <-- item} ):_*))