class Knockout::ViewModel
Attributes
_computed_methods[RW]
_observable_arrays[RW]
_observables[RW]
Public Class Methods
attr_computed(name, method_name=nil, &block)
click to toggle source
# File lib/opal/knockout/view_model.rb, line 24 def attr_computed(name, method_name=nil, &block) raise ArgumentError, "#{self.to_s}##{__method__}: You must set method_name or block" if method_name.nil? && !block_given? return if method_name.nil? && !block_given? self._computed_methods ||= {} self._computed_methods[name] = if method_name.nil? block else method_name end end
attr_observable(*names)
click to toggle source
# File lib/opal/knockout/view_model.rb, line 16 def attr_observable(*names) names.each { |name| define_observable_accessor(name) } end
attr_observable_array(*names)
click to toggle source
# File lib/opal/knockout/view_model.rb, line 20 def attr_observable_array(*names) names.each { |name| define_observable_array_accessor(name) } end
new( *args, &blk )
click to toggle source
# File lib/opal/knockout/view_model.rb, line 8 def new( *args, &blk ) object = allocate object.before_initialize object.instance_eval{ initialize( *args, &blk ) } object.after_initialize object end
Private Class Methods
define_observable_accessor(name)
click to toggle source
# File lib/opal/knockout/view_model.rb, line 36 def define_observable_accessor(name) raise ArgumentError, "#{self.to_s}##{__method__}: name must String or Symbol" unless name.is_a?(String) || name.is_a?(Symbol) self._observables ||= [] self._observables << name define_method name do instance_variable_get(:"@#{name}") end define_method "#{name}=" do |value| instance_variable_get(:"@#{name}").call(value) end end
define_observable_array_accessor(name)
click to toggle source
# File lib/opal/knockout/view_model.rb, line 50 def define_observable_array_accessor(name) raise ArgumentError, "#{self.to_s}##{__method__}: name must String or Symbol" unless name.is_a?(String) || name.is_a?(Symbol) self._observable_arrays ||= [] self._observable_arrays << name define_method name do instance_variable_get(:"@#{name}") end define_method "#{name}=" do |value| instance_variable_get(:"@#{name}").call(value) end end
Private Instance Methods
after_initialize()
click to toggle source
# File lib/opal/knockout/view_model.rb, line 71 def after_initialize set_computed_variables end
before_initialize()
click to toggle source
# File lib/opal/knockout/view_model.rb, line 66 def before_initialize set_observables set_observable_arrays end
set_computed_variables()
click to toggle source
# File lib/opal/knockout/view_model.rb, line 95 def set_computed_variables (self.class._computed_methods || {}).each do |name, method_name| if method_name.is_a? Proc block = method_name instance_variable_set(:"@#{name}", Knockout::Computed.new{ self.instance_eval(&block) } ) else instance_variable_set(:"@#{name}", Knockout::Computed.new{ self.method(method_name).call } ) end end end
set_observable_arrays()
click to toggle source
# File lib/opal/knockout/view_model.rb, line 85 def set_observable_arrays (self.class._observable_arrays || []).each do |name| observable_array = `ko.observableArray()` observable_array.instance_eval do extend Knockout::ObservableArray end instance_variable_set(:"@#{name}", observable_array) end end
set_observables()
click to toggle source
# File lib/opal/knockout/view_model.rb, line 75 def set_observables (self.class._observables || []).each do |name| observable = `ko.observable()` observable.instance_eval do extend Knockout::Observable end instance_variable_set(:"@#{name}", observable) end end