关于binding.scala中一些注意事项

关于binding.scala中一些注意事项

本文会持续更新

binding.scala不支持

  1. 仅支持常规组件的 callback 函数 和 attribute属性,对于自定义的属性可以使用 “data:” 标识,则binding.scala可是实现支持,对于callback函数目前暂无拓展方案,目前看来需要进行二次开发才可实现对新的callback的支持。
    attribute扩展举例
val myDiv = <div data:customAttributeName="attributeValue"></div>
  1. for yield 仅支持 Vars类型, 支持嵌套的 for yield,但yield 返回不能为 序列node(即必须为单个dom元素)。
  2. 新版的@dom已经移除,必须使用最新的@html,最简单的实例
import com.thoughtworks.binding.Binding.Var
import org.lrng.binding.html
import org.scalajs.dom.html.Input
import org.scalajs.dom.raw.Event


object ComponentConfigInput {

  @html
  def render(nameTuple2: Tuple2[String, String], input1: Var[String] =Var(""), input2: Var[String]=Var("")) = {
    <div class="ui two column stackable grid">
      <div class="column">
        <div class="ui fluid left labeled input">
          <a class="ui label">
            {nameTuple2._1}
          </a>
          <input type="text" placeholder={nameTuple2._1} onchange={event: Event => input1.value = event.currentTarget.asInstanceOf[Input].value}/>

          </div>
      </div>
      <div class="column">
        <div class="ui fluid left labeled input">
          <a class="ui label">
            {nameTuple2._2}
          </a>
          <input type="text" placeholder={nameTuple2._2} onchange={event: Event => input2.value = event.currentTarget.asInstanceOf[Input].value}/>
        </div>
      </div>
    </div>
  }
}

本代码实例中使用的UI为Fomantic UI

  1. 关于bind的理解, 所谓bind,及代表相关值更新后,{xx.bind }后的代码均会重新执行,其中Var的常规用法事,Var("").bind, 而对于Vars("")的常规绑定用法则是 for yield表达式。
  2. 根据现象来看,bind判定变化并不依据实例是否同一个,而是依赖值进行判定
  3. if 表达式输出结果如果是 node,必须存在else,及整个表示结果必须有输出且不为Nothing
  4. 使用中发现一次if 表达式失效的情况,切换为 match case ture/false后可行,原因咱不明确
  5. 关于循环和嵌套循环
 @html
  def crossTr(sigResult: SignalParseResult) = {
    val crossId = sigResult.crossId
    val totalNum = sigResult.number.values.sum.toDouble
    <tr>
      <td>{crossId.toString}</td>
      {
      for (state <- Vars("miss", "offline", "uncontrollable", "normal")) yield {
        <td>
          {s"${sigResult.number(state)}(${if (totalNum == 0) 0 else (sigResult.number(state) / totalNum * 100).formatted("%.2f")}%)"}
        </td>
      }
      }
      <td>
        {val state = "total"
      s"${totalNum}"}
      </td>
    </tr>
  }

  @html
  def render(crossIdsSignalResult: Vars[SignalParseResult] = Vars.empty[SignalParseResult]) = {
    <div>
      <table class="ui padded table">
        <thead>
          <tr>
            <th>cross_id</th>
            <th>miss</th>
            <th>offline</th>
            <th>uncontrollable</th>
            <th>normal</th>
            <th>total</th>
          </tr>
        </thead>
        <tbody>
          {
            for (sigResult <- crossIdsSignalResult) yield {
              crossTr(sigResult).bind
            }
          }
        </tbody>
      </table>
    </div>
  }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值