0

Outwatchで Observableのリストをレンダリングするにはどうすればよいですか? 単一の Observable が必要な場合はどうすればよいですか? それらをアプリケーションとしてどのようにシーケンス/圧縮する必要がありますか? applicative(?) 操作 'zip' を使用して List[Observable] を Observable[List] に変換すると、レンダリングされると予想されますか? (つまり、オブザーバブルをチェーンする必要がない場合)

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

以下の1つの答えで

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 より大きい場合は何も表示されませんが、要素が 1 つのリストの場合は表示されます。私は html/scala-js と rx 初心者です。また、Observables がどのようにアプリカティブ ファンクターである可能性があるか (またはそうでない可能性があるか) を誤解している可能性があります。「zip」ではなく「sequence」を探していました。

完全なコードのスクリーンショット

コード全体のスクリーンショット

4

1 に答える 1