Java-like equals() method?

View: New views
6 Messages — Rating Filter:   Alert me  

Java-like equals() method?

by frank_sommers :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi,

I've been searching for a good solution to implementing object equality. I'm familiar with
ObjectUtil, etc., but it still makes things harder than they should be.

It may be best to illustrate this with an example. Suppose I have a ComboBox with an
ArrayCollection as a data provider. The ArrayCollection is populated with value objects
from the server, e.g., User objects.  Suppose that I have a Task class, and a Task may
have an assignedToUser property, which is a User instance. When the someone selects a
Task (say, in a master-detail view), I would like the ComboBox to set its selectedItem to
the user for the given Task, i.e., combBox.selectedItem = myUser.assignedToUser.

The problem is that no Task in the ComboBox's data provider and the User's
assignedToUser property are ever equal using the == or === operators.

So I would like to implement a custom equality for User, and have the ComboBox use that
to set its selectedItem to the specified user. In Java, this is easily done by overriding the
equals() and hashCode() methods of User.

Any suggestions on how to achieve something similar in Flex would be much appreciated.
 
Thanks,

-- Frank


Parent Message unknown Re: Java-like equals() method?

by jitendra jain :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

In this case you need to use Bindable

BindingUtils.bindProperty(myUser,"assignedToUser",combBox,"selectedItem"); if you want to reflect the changes from myUser.assignedToUser to CombBox.selectedItem..
 Thanks,

with Regards,
Jitendra Jain




----- Original Message ----
From: frank_sommers <fsommers@...>
To: flexcoders@...
Sent: Saturday, 11 October, 2008 8:24:18 AM
Subject: [flexcoders] Java-like equals() method?


Hi,

I've been searching for a good solution to implementing object equality. I'm familiar with
ObjectUtil, etc., but it still makes things harder than they should be.

It may be best to illustrate this with an example. Suppose I have a ComboBox with an
ArrayCollection as a data provider. The ArrayCollection is populated with value objects
from the server, e.g., User objects. Suppose that I have a Task class, and a Task may
have an assignedToUser property, which is a User instance. When the someone selects a
Task (say, in a master-detail view), I would like the ComboBox to set its selectedItem to
the user for the given Task, i.e., combBox.selectedIte m = myUser.assignedToUs er.

The problem is that no Task in the ComboBox's data provider and the User's
assignedToUser property are ever equal using the == or === operators.

So I would like to implement a custom equality for User, and have the ComboBox use that
to set its selectedItem to the specified user. In Java, this is easily done by overriding the
equals() and hashCode() methods of User.

Any suggestions on how to achieve something similar in Flex would be much appreciated.

Thanks,

-- Frank

 


      Connect with friends all over the world. Get Yahoo! India Messenger at http://in.messenger.yahoo.com/?wm=n/

Re: Java-like equals() method?

by Maciek Sakrejda :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Frank,

There's no .equals() in actionscript unless you implement it yourself.
Without hearing more about the context, it's hard to tell whether
Jitendra's data binding solution would work for this specific problem
(data binding would effectively set the list selection to an object that
is not in the list--I'm not sure what happens there), but you might run
into a need for .equals() further down the line. We did, and since all
of our VOs inherit from one VO base object, we just implement .equals()
in these as necessary. It seems rather horrifying that there's
no .equals() at first, but you don't really need it that often...

--
Maciek Sakrejda
Truviso, Inc.
http://www.truviso.com

-----Original Message-----
From: frank_sommers <fsommers@...>
Reply-To: flexcoders@...
To: flexcoders@...
Subject: [flexcoders] Java-like equals() method?
Date: Sat, 11 Oct 2008 02:54:18 -0000

Hi,

I've been searching for a good solution to implementing object equality.
I'm familiar with
ObjectUtil, etc., but it still makes things harder than they should be.

It may be best to illustrate this with an example. Suppose I have a
ComboBox with an
ArrayCollection as a data provider. The ArrayCollection is populated
with value objects
from the server, e.g., User objects. Suppose that I have a Task class,
and a Task may
have an assignedToUser property, which is a User instance. When the
someone selects a
Task (say, in a master-detail view), I would like the ComboBox to set
its selectedItem to
the user for the given Task, i.e., combBox.selectedItem =
myUser.assignedToUser.

The problem is that no Task in the ComboBox's data provider and the
User's
assignedToUser property are ever equal using the == or === operators.

So I would like to implement a custom equality for User, and have the
ComboBox use that
to set its selectedItem to the specified user. In Java, this is easily
done by overriding the
equals() and hashCode() methods of User.

Any suggestions on how to achieve something similar in Flex would be
much appreciated.

Thanks,

-- Frank




 



Re: Java-like equals() method?

by frank_sommers :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Thanks for the replies.

Well, Jitendra's solution worked only when I created a ComboBox subclass that did take a
special equals() (based on the value of a property named "id") into account. Basically, I
overrode the selectedItem property in this subclass.

I think equals() and hashCode() are absolutely important, and I find that it's a pain that
Flex doesn't have them: In collection contains() methods, selecting items in controls, etc.,
an equals() semantic is really important. There are many duplicate objects that are
semantically equivalent in RIA clients, and without well-defined semantics for equality I'm
finding that I have to implement this sort of logic in components myself.

Any chance that this may be addressed in forthcoming Flex versions?

Thanks,

-- Frank

--- In flexcoders@..., Maciek Sakrejda <msakrejda@...> wrote:

>
> Frank,
>
> There's no .equals() in actionscript unless you implement it yourself.
> Without hearing more about the context, it's hard to tell whether
> Jitendra's data binding solution would work for this specific problem
> (data binding would effectively set the list selection to an object that
> is not in the list--I'm not sure what happens there), but you might run
> into a need for .equals() further down the line. We did, and since all
> of our VOs inherit from one VO base object, we just implement .equals()
> in these as necessary. It seems rather horrifying that there's
> no .equals() at first, but you don't really need it that often...
>
> --
> Maciek Sakrejda
> Truviso, Inc.
> http://www.truviso.com
>
> -----Original Message-----
> From: frank_sommers <fsommers@...>
> Reply-To: flexcoders@...
> To: flexcoders@...
> Subject: [flexcoders] Java-like equals() method?
> Date: Sat, 11 Oct 2008 02:54:18 -0000
>
> Hi,
>
> I've been searching for a good solution to implementing object equality.
> I'm familiar with
> ObjectUtil, etc., but it still makes things harder than they should be.
>
> It may be best to illustrate this with an example. Suppose I have a
> ComboBox with an
> ArrayCollection as a data provider. The ArrayCollection is populated
> with value objects
> from the server, e.g., User objects. Suppose that I have a Task class,
> and a Task may
> have an assignedToUser property, which is a User instance. When the
> someone selects a
> Task (say, in a master-detail view), I would like the ComboBox to set
> its selectedItem to
> the user for the given Task, i.e., combBox.selectedItem =
> myUser.assignedToUser.
>
> The problem is that no Task in the ComboBox's data provider and the
> User's
> assignedToUser property are ever equal using the == or === operators.
>
> So I would like to implement a custom equality for User, and have the
> ComboBox use that
> to set its selectedItem to the specified user. In Java, this is easily
> done by overriding the
> equals() and hashCode() methods of User.
>
> Any suggestions on how to achieve something similar in Flex would be
> much appreciated.
>
> Thanks,
>
> -- Frank
>




Re: Re: Java-like equals() method?

by Josh McDonald-4 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Why is everybody overriding things like combobox to do this? You could cook
up a util to do it in 15 minutes.

In fact, I'll be back in 15 minutes.

On Thu, Oct 16, 2008 at 8:25 AM, frank_sommers <fsommers@...>wrote:

> Thanks for the replies.
>
> Well, Jitendra's solution worked only when I created a ComboBox subclass
> that did take a
> special equals() (based on the value of a property named "id") into
> account. Basically, I
> overrode the selectedItem property in this subclass.
>
> I think equals() and hashCode() are absolutely important, and I find that
> it's a pain that
> Flex doesn't have them: In collection contains() methods, selecting items
> in controls, etc.,
> an equals() semantic is really important. There are many duplicate objects
> that are
> semantically equivalent in RIA clients, and without well-defined semantics
> for equality I'm
> finding that I have to implement this sort of logic in components myself.
>
> Any chance that this may be addressed in forthcoming Flex versions?
>
> Thanks,
>
> -- Frank
>
> --- In flexcoders@..., Maciek Sakrejda <msakrejda@...> wrote:
> >
> > Frank,
> >
> > There's no .equals() in actionscript unless you implement it yourself.
> > Without hearing more about the context, it's hard to tell whether
> > Jitendra's data binding solution would work for this specific problem
> > (data binding would effectively set the list selection to an object that
> > is not in the list--I'm not sure what happens there), but you might run
> > into a need for .equals() further down the line. We did, and since all
> > of our VOs inherit from one VO base object, we just implement .equals()
> > in these as necessary. It seems rather horrifying that there's
> > no .equals() at first, but you don't really need it that often...
> >
> > --
> > Maciek Sakrejda
> > Truviso, Inc.
> > http://www.truviso.com
> >
> > -----Original Message-----
> > From: frank_sommers <fsommers@...>
> > Reply-To: flexcoders@...
> > To: flexcoders@...
> > Subject: [flexcoders] Java-like equals() method?
> > Date: Sat, 11 Oct 2008 02:54:18 -0000
> >
> > Hi,
> >
> > I've been searching for a good solution to implementing object equality.
> > I'm familiar with
> > ObjectUtil, etc., but it still makes things harder than they should be.
> >
> > It may be best to illustrate this with an example. Suppose I have a
> > ComboBox with an
> > ArrayCollection as a data provider. The ArrayCollection is populated
> > with value objects
> > from the server, e.g., User objects. Suppose that I have a Task class,
> > and a Task may
> > have an assignedToUser property, which is a User instance. When the
> > someone selects a
> > Task (say, in a master-detail view), I would like the ComboBox to set
> > its selectedItem to
> > the user for the given Task, i.e., combBox.selectedItem =
> > myUser.assignedToUser.
> >
> > The problem is that no Task in the ComboBox's data provider and the
> > User's
> > assignedToUser property are ever equal using the == or === operators.
> >
> > So I would like to implement a custom equality for User, and have the
> > ComboBox use that
> > to set its selectedItem to the specified user. In Java, this is easily
> > done by overriding the
> > equals() and hashCode() methods of User.
> >
> > Any suggestions on how to achieve something similar in Flex would be
> > much appreciated.
> >
> > Thanks,
> >
> > -- Frank
> >
>
>
>
>
> ------------------------------------
>
> --
> Flexcoders Mailing List
> FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
> Alternative FAQ location:
> https://share.acrobat.com/adc/document.do?docid=942dbdc8-e469-446f-b4cf-1e62079f6847
> Search Archives:
> http://www.mail-archive.com/flexcoders%40yahoogroups.comYahoo! Groups
> Links
>
>
>
>


--
"Therefore, send not to know For whom the bell tolls. It tolls for thee."

Like the cut of my jib? Check out my Flex blog!

:: Josh 'G-Funk' McDonald
:: 0437 221 380 :: josh@...
:: http://flex.joshmcdonald.info/

Re: Re: Java-like equals() method?

by Josh McDonald-4 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

http://snippets.gfunk007.com/?FindIndex.as

Usage:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
xmlns:pkg="pkg.*">

    <mx:ArrayCollection id="src1">
        <mx:Object label="Ken" objid="1"/>
        <mx:Object label="Ryu" objid="2"/>
        <mx:Object label="Chun-Li" objid="3"/>
        <mx:Object label="Dhalsim" objid="4"/>
        <mx:Object label="E. Honda" objid="5"/>
        <mx:Object label="Blanka" objid="6"/>
        <mx:Object label="Zangief" objid="7"/>
        <mx:Object label="Guile" objid="8"/>
    </mx:ArrayCollection>

    <mx:ArrayCollection id="src2">
        <mx:Object label="Ken" objid="1"/>
        <mx:Object label="Ryu" objid="2"/>
        <mx:Object label="Chun-Li" objid="3"/>
        <mx:Object label="Dhalsim" objid="4"/>
        <mx:Object label="E. Honda" objid="5"/>
        <mx:Object label="Blanka" objid="6"/>
        <mx:Object label="Zangief" objid="7"/>
        <mx:Object label="Guile" objid="8"/>
    </mx:ArrayCollection>

    <pkg:FindIndex source="{src2}" keyField="objid" searchFor="{
left.selectedItem }" id="fi"/>

    <mx:HBox horizontalCenter="0" verticalCenter="0">

        <mx:List id="left" dataProvider="{src1}" width="120"/>

        <mx:List id="right" dataProvider="{src2}" selectedIndex="{
fi.matchingIndex }" width="120"/>

    </mx:HBox>

</mx:Application>


On Thu, Oct 16, 2008 at 9:02 AM, Josh McDonald <josh@...> wrote:

> Why is everybody overriding things like combobox to do this? You could cook
> up a util to do it in 15 minutes.
>
> In fact, I'll be back in 15 minutes.
>
>
> On Thu, Oct 16, 2008 at 8:25 AM, frank_sommers <fsommers@...>wrote:
>
>> Thanks for the replies.
>>
>> Well, Jitendra's solution worked only when I created a ComboBox subclass
>> that did take a
>> special equals() (based on the value of a property named "id") into
>> account. Basically, I
>> overrode the selectedItem property in this subclass.
>>
>> I think equals() and hashCode() are absolutely important, and I find that
>> it's a pain that
>> Flex doesn't have them: In collection contains() methods, selecting items
>> in controls, etc.,
>> an equals() semantic is really important. There are many duplicate objects
>> that are
>> semantically equivalent in RIA clients, and without well-defined semantics
>> for equality I'm
>> finding that I have to implement this sort of logic in components myself.
>>
>> Any chance that this may be addressed in forthcoming Flex versions?
>>
>> Thanks,
>>
>> -- Frank
>>
>> --- In flexcoders@..., Maciek Sakrejda <msakrejda@...> wrote:
>> >
>> > Frank,
>> >
>> > There's no .equals() in actionscript unless you implement it yourself.
>> > Without hearing more about the context, it's hard to tell whether
>> > Jitendra's data binding solution would work for this specific problem
>> > (data binding would effectively set the list selection to an object that
>> > is not in the list--I'm not sure what happens there), but you might run
>> > into a need for .equals() further down the line. We did, and since all
>> > of our VOs inherit from one VO base object, we just implement .equals()
>> > in these as necessary. It seems rather horrifying that there's
>> > no .equals() at first, but you don't really need it that often...
>> >
>> > --
>> > Maciek Sakrejda
>> > Truviso, Inc.
>> > http://www.truviso.com
>> >
>> > -----Original Message-----
>> > From: frank_sommers <fsommers@...>
>> > Reply-To: flexcoders@...
>> > To: flexcoders@...
>> > Subject: [flexcoders] Java-like equals() method?
>> > Date: Sat, 11 Oct 2008 02:54:18 -0000
>> >
>> > Hi,
>> >
>> > I've been searching for a good solution to implementing object equality.
>> > I'm familiar with
>> > ObjectUtil, etc., but it still makes things harder than they should be.
>> >
>> > It may be best to illustrate this with an example. Suppose I have a
>> > ComboBox with an
>> > ArrayCollection as a data provider. The ArrayCollection is populated
>> > with value objects
>> > from the server, e.g., User objects. Suppose that I have a Task class,
>> > and a Task may
>> > have an assignedToUser property, which is a User instance. When the
>> > someone selects a
>> > Task (say, in a master-detail view), I would like the ComboBox to set
>> > its selectedItem to
>> > the user for the given Task, i.e., combBox.selectedItem =
>> > myUser.assignedToUser.
>> >
>> > The problem is that no Task in the ComboBox's data provider and the
>> > User's
>> > assignedToUser property are ever equal using the == or === operators.
>> >
>> > So I would like to implement a custom equality for User, and have the
>> > ComboBox use that
>> > to set its selectedItem to the specified user. In Java, this is easily
>> > done by overriding the
>> > equals() and hashCode() methods of User.
>> >
>> > Any suggestions on how to achieve something similar in Flex would be
>> > much appreciated.
>> >
>> > Thanks,
>> >
>> > -- Frank
>> >
>>
>>
>>
>>
>> ------------------------------------
>>
>> --
>> Flexcoders Mailing List
>> FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
>> Alternative FAQ location:
>> https://share.acrobat.com/adc/document.do?docid=942dbdc8-e469-446f-b4cf-1e62079f6847
>> Search Archives:
>> http://www.mail-archive.com/flexcoders%40yahoogroups.comYahoo! Groups
>> Links
>>
>>
>>
>>
>
>
> --
> "Therefore, send not to know For whom the bell tolls. It tolls for thee."
>
> Like the cut of my jib? Check out my Flex blog!
>
> :: Josh 'G-Funk' McDonald
> :: 0437 221 380 :: josh@...
> :: http://flex.joshmcdonald.info/
>



--
"Therefore, send not to know For whom the bell tolls. It tolls for thee."

Like the cut of my jib? Check out my Flex blog!

:: Josh 'G-Funk' McDonald
:: 0437 221 380 :: josh@...
:: http://flex.joshmcdonald.info/
LightInTheBox - Buy quality products at wholesale price!