module Glimmer::LibUI::DataBindable
Parent
controls and shapes who have children and add child post_initialize_child
Public Instance Methods
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
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
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
# File lib/glimmer/libui/data_bindable.rb, line 64 def data_binding_model_attribute_observer_registrations @data_binding_model_attribute_observer_registrations ||= [] end