Hi Greg,

I am also not a fan of MVC frameworks for GUI applications. Basically, I think their fundamental premise (that MVC is a valid approach to global application design) is crap, but I'll save it for another time or never.

You've brought up the messiness of data binding a couple times. Just can't agree with that experience. In fact, mine has been the opposite. I started writing apps using a load/store approach and then I switched to data binding because

a.  it's simpler

b. it's more efficient in terms of runtime performance and programmer (my) productivity

c.  it makes more complex use cases a lot easier

I'm not digging the "Lists and Maps as data models" idea. I want behavior on my objects. I want data structures with declared properties. I'm greedy dammit. Flex gives me all that with event-driven data binding.

Cheerio,

Michael

On Wed, 21 Apr 2010, Greg Brown wrote:

Hi Michael,

As I mentioned, Pivot does support data binding, just not the same way it is handled in Flex. It uses a load/store model rather than an event-driven one. We think that lends itself to cleaner application design, especially when your application data comes from a REST service. From my experience, event-based data binding just gets messy really fast.

Another common approach is to use an MVC framework such as PureMVC (originally written for Flex but ported to a number of other platforms). I'm not a huge fan of PureMVC specifically, but the fundamental concepts are sound, and there are other alternatives as well.

You might still be able to do what you describe if you take a more loosely-typed approach (which may be what Flex actually does under the hood, since it is ultimately based on a loosely typed language). If you use Maps and Lists as your data structures, the events are already defined for you.

Hope this helps.

Greg

On Apr 21, 2010, at 8:02 AM, Michael Allman wrote:

Hi Todd,

Let me see if I understand what would be involved here.  Suppose I have a 
crappy bean class that looks like this:

class Person {
...
public String getName() {...}
public void setName(String name) {...}
...
}

Then, following your example, I create a PersonListener interface that looks 
like this:

interface PersonListener {
void nameChanged(Person person);
}

Then I modify my Person class to add this:

class Person {
...
public ListenerList<PersonListener> getPersonListeners() {...}
...
public String getName() {
...
"if the name property has changed and all that shit then call all the 
PersonListeners"
}

Is that right?  This looks really painful to me.  All I want to do is bind a 
property's value between two objects without pressing too many keys. This is a 
lot of keys to press.  And that's for one property.  Suppose I want to bind 50 
properties (not on the same class, but spread around the system)?  500?

Basically I want something that looks and works like binding in Flex and MXML, 
but I think it can be even simpler.

I've been doing a bunch of Flex work lately and have come to the following two 
conclusions:

1.  I hate Flex because it's an unsupported cesspool of bugs and poor software 
design, except

2.  I like their data binding, and I use it pervasively in my application 
design.  In fact, I don't know a viable alternative.

I'd really like to put Flex in the grave as far as my own career is concerned.  
I'm tired of spending 2x - 3x as long as it should to get something done 
because I have to fix or work around or give up on all the bugs in flash player 
and flex that Adobe will never fix because they don't give a shit. That may not 
be very realistic in the short term, but Pivot is by far the most compelling 
alternative and competitor I have ever seen, and I love coding to the Java 
platform.

I just need to convince Gregg and Co that Pivot needs data binding.  Ha!

Cheers,

Michael

On Mon, 29 Mar 2010, Todd Volkert wrote:

What he said :-)

Michael, I'd add that to your "simple" requierment, WTKX script might be the
simplest way to wire up these types of quick event handlers.  You'd need
your user object class to fire events the Pivot way (using Pivot's
ListenerList).  Then, your WTKX could look something like this:

<myPackage:UserData wtkx:id="userData"
UserDataListener.fooChanged="textInput.setText(userData.getFoo())"/>
...
<TextInput wtkx:id="textInput"
TextInputTextListener.textChanged="userData.setFoo(textInput.getText())"/>

-T

On Mon, Mar 29, 2010 at 8:47 AM, Greg Brown <[email protected]> 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




Reply via email to