我应该如何在Outwatch中呈现Observable 列表?如果我需要一个 Observable 怎么办:我应该如何将它们作为应用程序进行排序/压缩?当我使用 applicative(?) 操作 '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)
}
}
当列表长度 > 1 时没有任何显示,但对于单元素列表则显示。我是一个 html/scala-js 和 rx noob。并且可能会误解 Observables 可能(或可能不是)是应用函子。我在寻找“序列”而不是“拉链”。
完整代码截图