Sha256: c83953ae56e71a7e93dd22ddc34828f9305020a5043ba12cabcacc2418792b24

Contents?: true

Size: 1.52 KB

Versions: 7

Compression:

Stored size: 1.52 KB

Contents

require 'glimmer/data_binding/observable'
require 'glimmer/data_binding/observer'
require 'glimmer/swt/display_proxy'

# This ensures all data-binding events happen async and block on modal display

module Glimmer
  module DataBinding
    # TODO prefix utility methods with double-underscore
    module ObservableModel
      include Observable
#       include Glimmer

      def add_property_writer_observers(property_name)
        property_writer_name = "#{property_name}="
        method(property_writer_name)
        ensure_array_object_observer(property_name, send(property_name))
        begin
          method("__original_#{property_writer_name}")
        rescue
          old_method = self.class.instance_method(property_writer_name)
          define_singleton_method("__original_#{property_writer_name}", old_method)
          define_singleton_method(property_writer_name) do |value|
            old_value = self.send(property_name)
            unregister_dependent_observers(property_name, old_value)
            self.send("__original_#{property_writer_name}", value)
#             Glimmer::Opal::DisplayProxy.instance.async_exec do
            notify_observers(property_name)
            ensure_array_object_observer(property_name, value, old_value)
#             end
          end
        end
      rescue => e
        # ignore writing if no property writer exists
        Glimmer::Config.logger&.debug "No need to observe property writer: #{property_writer_name}\n#{e.message}\n#{e.backtrace.join("\n")}"
      end
      
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
glimmer-dsl-opal-0.6.1 lib/glimmer/data_binding/ext/observable_model.rb
glimmer-dsl-opal-0.6.0 lib/glimmer/data_binding/ext/observable_model.rb
glimmer-dsl-opal-0.5.1 lib/glimmer/data_binding/ext/observable_model.rb
glimmer-dsl-opal-0.5.0 lib/glimmer/data_binding/ext/observable_model.rb
glimmer-dsl-opal-0.4.0 lib/glimmer/data_binding/ext/observable_model.rb
glimmer-dsl-opal-0.3.0 lib/glimmer/data_binding/ext/observable_model.rb
glimmer-dsl-opal-0.2.0 lib/glimmer/data_binding/ext/observable_model.rb