As our product has gotten bigger, I have moved it from a standard 
Model-View-Controller design to a 
more strict Cairngorm-like Model-View-Dispatcher-Command design. But one 
particular aspect of it has 
left me a bit unsure as to the best practice. I'm hoping others can share their 
views on this.

There are various times when a Command needs to make a "non-data-related" 
update to the view such 
as: 
- disabling/enabling buttons while a server operation runs
- updating the focus of controls
- changing component states
- hiding/showing components

We've had some debate about the best method to accomplish this. The easy 
scenario is changing states 
because we can simply have a model variable that the view's currentState 
property is data-bound to. So 
we can modify that model variable from within the Command which indirect 
updates the view. But there 
are other situations that are more tricky. For example, we have a login view 
with a username and 
password. We have a command that loads the stored username. If the stored 
username is not found, 
we'd like to set the focus on the username textbox, whereas if the username is 
found, then we want to 
put the focus on the password textbox. I don't believe you can set up focus 
using data-binding (if you 
can let me know). So we have postulated several different solutions to this, 
all of which work but we are 
trying to figure out which one is the most "correct" based on the design 
pattern.

1. Set up a ChangeWatcher to watch the a model username variable, in the 
handler set the focus based 
on whether that variable is null or not.

2. Dispatch an event from the command that the view listens to. This is used to 
notify the view when the 
username variable has been populated and thus when it can run it's focus logic.

3. Have the view object store a reference to itself in the model somewhere so 
that the command can 
update it directly.

I know this seems like a very granular point but I'm just looking for the 
general practice in these types of 
situations because there are lots of them.

Any thoughts?

Ryan



Reply via email to