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

时间:2018-03-05 20:52:31

标签: 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>}
  }
}

2 个答案:

答案 0 :(得分:2)

我可以将它带到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构造函数中的数组:Constants(bindData: _*)
  4. 使用每个数据元素调用元素:.map(a => dataElem(a))
  5. 绑定每个结果:.map(_.bind)
  6. 所以你逐级下去。

答案 1 :(得分:1)

来自Binding.scala: Strategy to avoid too many dom-tree updates并且必须提到直接对Vars的绑定与理解相比是缓慢的。

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

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