- Walk the tree, and find all bindings.
- Check each binding for a changed value, i.e. where the model value differs from the control value.
- For items that have the same value: ignore
- We now have a list of bindings whose value changed. Order these bindings as follows:
- A "deeper" binding comes before a "higher" binding
- Bindings at the same "level" execute in order of dom traversal.
- Now bind all values as per the above ordering.
The UI should act as follows:
- When the country changes the City should be set to the 1st city of that country in the city list
- When the city changes the country should be updated.
We bind these controls to two properties in our model, called "country" and "city". The model ensures that:
- As soon as the city's setter is called, the country property is updated with the city's country.
- As soon as the country's setter is called, the "city" property is checked.
By ordering like this most binding issues should resolve themselves automatically.