A simple two-way data binding library for RubyMotion.
Version 0.3.0
introduces breaking changes and deprecations. If you're upgrading, please check the release
notes.
Add this line to your application's Gemfile:
gem 'motion_bindable'
And then execute:
$ bundle
If you want to use the default strategies that come with MotionBindable add
this to your app_delegate.rb
:
def application(application, didFinishLaunchingWithOptions: launch_options)
MotionBindable::Strategies.apply
true
end
Name | Definition |
---|---|
Object | Refers to the parent object that can have many bindings. Usually a model of some sort. |
Binding | The connection between an object and it's bound children. Observes and updates both sides. Represented as a Strategy |
Bound | Usually an input object, like a UITextField or a Proc . |
Add include MotionBindable::Bindable
to make an object bindable:
# Models
class Item
include MotionBindable::Bindable
attr_accessor :name
attr_accessor :location
def location
@address ||= Address.new
end
end
class Address
attr_accessor :address
end
In your view controller, you can bind the object to a set of Views or any other object:
class ItemListViewController
def viewDidLoad
super
@name_field = UITextField.alloc.initWithFrame [[110, 60], [100, 26]]
@name_field.placeholder = "Name"
view.addSubview @name_field
@address_field = UITextField.alloc.initWithFrame [[110, 100], [100, 26]]
@address_field.placeholder = "Address"
view.addSubview @address_field
@item = Item.new
end
def viewWillAppear(animated)
@item.bind_attributes({
name: @name_field,
location: {
address: @address_field
}
})
end
# Recommended: Clean everything up when the view leaves
def viewWillDisappear(animated)
@item.unbind_all
end
end
When @name_field.text
or @address_field.text
changes, so will your model!
The above example uses the MotionBindable::Strategies::UITextField
. which
comes with MotionBindable. Take a look in lib/motion_bindable/strategies
for
the available defaults. You can implement your own strategies by extending
MotionBindable::Strategy
. Please use the existing strategies as a guideline.
The following strategies come with motion-bindable and are setup when
MotionBindable::Strategies.apply
is called.
Name | Object Candidates | Direction |
---|---|---|
MotionBindable::Strategies::UITextField |
Any UITextField |
Bound <-> Attribute |
MotionBindable::Strategies::Proc |
Any Proc |
Bound --> Attribute |
MotionBindable::Strategies::UILabel |
Any UILabel |
Bound <-- Attribute |
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request