module Glimmer::LibUI::DataBindable

Parent controls and shapes who have children and add child post_initialize_child

Public Instance Methods

data_bind(property, model_binding) click to toggle source

Sets up read/write (bidirectional) data-binding

classes are expected to implement ‘data_bind_write(property, model_binding)` to setup write data-binding by observing view property for changes and writing to model attribute via model binding accordingly

classes can override data_bind_read to disable read data-binding in rare scenarios that might need it

returns model attribute reading observer registration by default

# File lib/glimmer/libui/data_bindable.rb, line 34
def data_bind(property, model_binding)
  data_bind_read(property, model_binding).tap do
    data_bind_write(property, model_binding) unless model_binding.binding_options[:read_only]
  end
end
data_bind_read(property, model_binding) click to toggle source

Sets up read data-binding (reading from model to update view)

Default implementation observes model attribute for changes via model binding and updates view property accordingly

# File lib/glimmer/libui/data_bindable.rb, line 44
def data_bind_read(property, model_binding)
  model_attribute_observer = Glimmer::DataBinding::Observer.proc do
    new_value = model_binding.evaluate_property
    send("#{property}=", new_value) unless send(property) == new_value
  end
  observer_registration = model_attribute_observer.observe(model_binding, attribute_writer_type: [:attribute=, :set_attribute])
  model_attribute_observer.call # initial update
  data_binding_model_attribute_observer_registrations << observer_registration
  observer_registration
end
data_bind_write(property, model_binding) click to toggle source

Sets up write data-binding (writing to model from view)

Has no implementation by default. Classes are expected to implement this method by observing view property for changes and writing them to model accordingly via model binding

# File lib/glimmer/libui/data_bindable.rb, line 60
def data_bind_write(property, model_binding)
  # No Op by default
end
data_binding_model_attribute_observer_registrations() click to toggle source
# File lib/glimmer/libui/data_bindable.rb, line 64
def data_binding_model_attribute_observer_registrations
  @data_binding_model_attribute_observer_registrations ||= []
end