Greg,
Well, I'm kinda surprised I never responded because you certainly made
some assertions I strongly disagree with. :)
Also, I'm sorry I misspelled your name in my last message. I've been
working with a guy named "Gregg" and now I'm forever confused.
Anyway, back to business. So you say "load-n-store" is what works best
for an app that loads data then saves it. No disagreement there. But
that's far from the entire spectrum of GUI applications. Many do not fit
that mold. I think the "load/store" paradigm maps more closely to simple
database or service driven form-based apps where data is not shared among
multiple user interface components.
Now I'm going to lecture a bit. I'm sorry. I just don't know how to make
my point better.
One of the goals of MVC was to create an independent model which could be
presented through multiple concurrent views. A "simple" example would be
a multi-dimensional data set that's displayed in graphs and tables.
You're feed one "model" to multiple "views". That's pretty easy to do
with load and store---you load your data model from the service, then you
load the data model into your views. But, and this is a big *but*, what
if elements and properties of the data model can be changed through one or
more of the tables? How is that change, made through one view, propagated
to and reflected in the other views? I mean, let's say you change one
measure of one dimension of your data set from 342.64 to 356.10. That
changes how the graphs should be drawn, and maybe some other data in the
model depends on that particular measure's value, and then the changes in
that data should be displayed in some other table somewhere.
Eh. You see where I'm going. "Load-n-store" is going to fall apart here.
Bi-directional event-driven binding between model and view (maybe through
a controller or whatnot) will save the day.
So that's one argument for event-driven data binding. I can also just
state for a fact that I use data binding pervasively in Flex apps. I
don't know what I would do without it. I'd be writing custom event
listeners and handlers, I guess. Like in the bad old days of Swing.
Interestingly, I see you *are* using event-driven data binding for
list-based mutations. But if you change a property of an element of a
list, the list does not dispatch an event. The view remains ignorant.
So in that sense, you are kinda half-way there.
Finally, let me just comment on your last comment. Where I'm coming from
(data binding in Flex), doing this stuff with custom event
listeners/dispatchers is a real chore. Yeah, it can be done, but it's a
*lot* of work writing all that boilerplate. I touched on this more in my
last post where I reviewed what I believe is the recommended way to
implement the kind of data binding I'm looking for with Pivot 1.4. If I'm
mistaken and it's actually a lot simpler, please advise.
Cheers,
Michael
On Mon, 29 Mar 2010, Greg Brown wrote:
As you guessed, this type of data binding isn't currently supported.
Having worked with data binding systems like this in the past, I find
that it can lead to confusing and inefficient code, as too many things
are happening in the background when they don't need to be.
The load()/store() model used by Pivot maps more closely to how data
binding is used in many practical applications (especially those that
are REST-based): after making a server query to retrieve your data, you
populate your form using the load() method. When you want to save it
back to the server, you store() it into your model and upload it back to
the server.
More dynamic updates (like those you describe) can easily be achieved
via event listeners. This way, your application has complete control
over what is updated and when.
G
On Mar 28, 2010, at 11:48 PM, Michael Allman wrote:
Hello,
I have two related questions on data binding in Pivot. After a lot of searching and
digging, I'm pretty sure the answer is "no" to both of these questions. I just
want to confirm so we can move on to step 2---how to fix the situation.
So suppose we have some kind of User object with a r/w "name" property and a
Label declared in some WTKX file. My questions are:
1. Is there a simple way to bind the Label's "text" property to the User object's
"name" property in such a way that as the app user types into the text field the value of
the latter property is set to the value of the former (label.text => user.name)?
2. Is there a simple way to bind the User object's "name" property to the Label's "text" property
in such a way that when the value of the former property is changed, the value of the Label's "text" property
is set to the new value of the User object's "name" property?
This is a very important capability for me, and it's one that I think has a
reasonably simple solution. But I'd like to get a Pivot expert's thoughts
first. Maybe I'm missing something that's already there, or some other feature
that's more powerful than this.
Cheers,
Michael