Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 4.0

Generated Object

An internal class that currently should not be relied on.

Attributes

  • source <Object> The object that triggers the binding update
  • sourceProperty <String> A property that is read for the update and whose change triggers the update
  • sourceEvent <String> The event name trigger an update
  • sourceValue <Closure> A closure providing the value when sourceEvent triggers
  • target <Object> The object to be updated when a bound value changes
  • targetProperty <String> The property on the target update to which the queried value will be written
  • validator <Closure> If the closure returns null or Boolean.FALSE then a triggered binding will be canceled
  • converter <Closure> Takes the queried value and converts it to another object to be written to the targetProperty. The queried value is passed in "it" to the closure.

Content

bind accepts no content

Usage

bind can be used as a stand alone element or as a value for any attribute of any object.

When used as an attribute value the target and targetProperty values implicitly become the current object being constructed and the property being written to.

Until the external API is finalized, it is not recommended to use the object returned from bind

Examples

Example binding one property to another:

Code Block
swing.frame() {
  panel {
    textField('Change Me!', id:'tf')
    button(text: bind(source:tf, sourceProperty:'text'))
  }
}

Example when triggering on a particular event with a value closure

Code Block
swing.frame() {
  panel {
    textField('Change Me!', id:'tf')
    button(text: bind(source:tf.document, sourceEvent:'undoableEditHappened', 
      sourceValue:{System.currentTimeMillis()}))
  }
}

Note that the source value can get any arbitrary value.

Example with validator and converter:

Code Block
swing.frame() {
  panel
   {
    textField('Change Me!', id:'tf')
    button(text: bind(source:tf, sourceProperty:'text',
      validator: { tf.text.length() >= 1}, converter: { it.toLowerCase() } ))
   }
}

In this example the validator prevents the button text from having less than 1 char and the converter makes the button text all lowercase.

Note: Tested on Groovy 1.5.1