在 Binding.scala 中使用数组作为可绑定变量



数据字段的案例类中的参数数量是动态变化的。

那么,Var也可以绑定 Binding.scala 中的js.Array吗?

我尝试了以下代码但没有成功:

case class Data(d: Var[js.Array[String]])
val data = Vars.empty[Data]
{
  for (x <- data) yield {
    val y: js.Array[String] = x.d.bind
    y.zipWithIndex.foreach{case (v, i) => <th>{ y(i) }</th>}
  }
}

我可以把它带到ScalaFiddle上。

本质上,您必须将每个数组或选项放在 Constants 对象中,例如:

  @dom
  def render = {
      val bindData= data.bind
      <div>
        {Constants(bindData: _*)
           .map(a => dataElem(a))
           .map(_.bind)}
      </div>
    }

它应该具有:

  1. 绑定数据:val bindData= data.bind
  2. 放置元素:<div>放置
  3. 常量构造函数中的数组:Constants(bindData: _*)
  4. 使用每个数据元素调用元素:.map(a => dataElem(a))
  5. 绑定每个结果:.map(_.bind)

所以你逐级下降。

来自 Binding.scala:避免太多 dom-tree 更新的策略,并且不得不提到,与理解相比,直接在 Vars 上绑定很慢。

你应该总是使用来理解Vars,除非你正在做一些必须在整个列表上工作的聚合。

对于您的示例,我创建了一个更新的 ScalaFiddle:https://scalafiddle.io/sf/7lCiigL/0

相关内容

  • 没有找到相关文章

最新更新