Package

com.thoughtworks

binding

Permalink

package binding

Content Hierarchy
Visibility
  1. Public
  2. All

Type Members

  1. trait Binding[+A] extends AnyRef

    Permalink

    A data binding expression that represents a value that automatically recalculates when its dependencies change.

    A data binding expression that represents a value that automatically recalculates when its dependencies change.

    Author:

    杨博 (Yang Bo) <[email protected]>

    Example:
    1. You may create a data binding expression via Binding { ??? } block or @dom annotation.

      val bindingInt: Binding[Int] = Binding { 100 }
      @dom val bindingBr: Binding[HTMLBRElement] = <br/>

      A data binding expression may depend on other binding expressions via bind method:

      val bindingString: Binding[String] = Binding { bindingInt.bind.toString }
  2. final class FutureBinding[A] extends Binding[Option[Try[A]]]

    Permalink

    A wrapper that wraps scala.concurrent.Future to a Binding.

    A wrapper that wraps scala.concurrent.Future to a Binding.

    Note

    Because all Binding (including this FutureBinding) are not thread safe, you must guarantee executor running sequentially.

  3. final class JsPromiseBinding[A] extends Binding[Option[Either[Any, A]]]

    Permalink

    A wrapper that wraps a scala.scalajs.js.Thenable to a com.thoughtworks.binding.Binding.

    Author:

    杨博 (Yang Bo) <[email protected]>

    Example:
    1. This JsPromiseBinding will cache the result of the thenable. Given a scala.scalajs.js.Thenable that will be delay executed.

      import scala.scalajs.js
      var upstreamEvaluationCount1 = 0
      val delayedThenable = js.Promise.resolve[Unit](()).`then`[Double] { case () =>
        upstreamEvaluationCount1 += 1
        math.random
      }

      The execution will not be performed right now.

      val jsPromiseBinding = JsPromiseBinding(delayedThenable)
      upstreamEvaluationCount1 should be(0)

      When there are multiple usages of jsPromiseBinding, each usage should be triggered with the same value.

      var evaluationCount1 = 0
      var evaluationCount2 = 0
      var evaluationCount3 = 0
      val usage1 = Binding {
        jsPromiseBinding.bind match {
          case Some(Right(value)) =>
            evaluationCount1 += 1
          case _ =>
        }
      }
      val usage2 = Binding {
        jsPromiseBinding.bind match {
          case Some(Right(value)) =>
            evaluationCount2 += 1
            val usage3 = Binding {
              jsPromiseBinding.bind match {
                case Some(Right(value)) =>
                  evaluationCount3 += 1
                case _ =>
              }
            }
            val _ = usage1.bind
            usage3.bind
          case _ =>
        }
      }
      usage2.watch()
      upstreamEvaluationCount1 should be(0)
      evaluationCount1 should be(0)
      evaluationCount2 should be(0)
      evaluationCount3 should be(0)

      And each usage should be triggered once and only once.

      delayedThenable.toFuture.map { _ =>
        upstreamEvaluationCount1 should be(1)
        evaluationCount1 should be(1)
        evaluationCount2 should be(1)
        evaluationCount3 should be(1)
      }
  4. final class SafeBuffer[A] extends Buffer[A]

    Permalink

    Similar to scala.collection.mutable.ArrayBuffer, except that this SafeBuffer allows adding or removing elements via += and -= inside a foreach block.

    Similar to scala.collection.mutable.ArrayBuffer, except that this SafeBuffer allows adding or removing elements via += and -= inside a foreach block.

    Note

    A java.lang.IllegalStateException will be thrown when invoking methods other than += and -= in a foreach block.

  5. trait XmlExtractor extends AnyRef

    Permalink

    Author:

    杨博 (Yang Bo) <[email protected]mail.com>

  6. macro class dom extends Annotation with StaticAnnotation

    Permalink

    Enable XML DOM literal for Binding.scala

    Enable XML DOM literal for Binding.scala

    Author:

    杨博 (Yang Bo) <[email protected]>

    Annotations
    @compileTimeOnly( ... )
  7. macro class fxml extends Annotation with StaticAnnotation

    Permalink

    An annotation to convert FXML literals to JavaFX GUI.

    An annotation to convert FXML literals to JavaFX GUI.

    Author:

    杨博 (Yang Bo) <[email protected]>

    Annotations
    @compileTimeOnly( ... )
    Note

    The FXML support is still experimental. API or behavior of this annotation may change without bumping a majoy version number.

    See also

    https://github.com/ThoughtWorksInc/Binding.scala/wiki/FXML for usage

Value Members

  1. object Binding extends WithTypeClass[Monad, Binding]

    Permalink

    Author:

    杨博 (Yang Bo) <[email protected]>

  2. object FutureBinding

    Permalink
  3. object JsPromiseBinding

    Permalink
  4. object Route

    Permalink

    Author:

    杨博 (Yang Bo) <[email protected]>

  5. object XmlExtractor

    Permalink
  6. object dom

    Permalink

    Author:

    杨博 (Yang Bo) <[email protected]>

  7. object fxml

    Permalink

Ungrouped