Thanks Josh! I haven't tried to implement this yet but so far it makes sense.

Thanks again,
John


On Mar 12, 2009, at 9:01 PM, Josh McDonald wrote:

In your custom control, change this:


    public function set dataProvider(dp:ArrayCollection):void {
        _dp = dp;
trace("this fires when the AC is created, but not when it's contents change");
    }

to something like this:


public function set dataProvider(value : ArrayCollection) : void
{
    if (_dp == value)
        return;

    if (dataProvider)
dataProvider.removeEventListener(CollectionEvent.COLLECTION_CHANGE, handleUpdatedProvider);

    _dp = value;

    if (dataProvider)
dataProvider.addEventListener(CollectionEvent.COLLECTION_CHANGE, handleUpdatedProvider, ???, ???, true); // Weak listener!

    handleUpdatedProvider(null);
}

private function handleUpdatedProvider(event : CollectionEvent) : void
{
    //... do stuff
}


Note that this is just typed out of the top of my head, probably full of typos, and you need to put the default options in place of "???" when attaching the listener :)

-Josh


2009/3/13 John Robinson <jrobi...@nycap.rr.com>
Yeah, I've been directly updating the properties. Here's the weird part... if I use the ArrayCollection as a dataProvider for a List control, it updates. If I use it for a custom control that I've created, it does not.


Example:

This works as expected:
<mx:List dataProvider="{model.users}"/>

This does not:
<jr:customComponent dataProvider={model.users}/>

//pseudo component source
<customComponent>
    <mx:Script>
    private var _dp:ArrayCollection;

    public function set dataProvider(dp:ArrayCollection):void {
        _dp = dp;
trace("this fires when the AC is created, but not when it's contents change");
    }

    </mx:Script>
</customComponent>

Thanks again!
John

On Mar 10, 2009, at 4:44 PM, valdhor wrote:

How do you update a given UserVO's userData? Do you directly access the public properties?

I have never done it this way - I use getters and setters...

package com.jrobinson.model.VO
{
    [Bindable]
    public class UserVO
    {
        private var _id:int = -1;
        private var _username:String = null;
        private var _enabled:Boolean = false;
        private var _userData:XMLList = null;

public function UserVO(id:int, username:String, enabled:Boolean, userData:XMLList)
        {
            _id = id;
            _username = username;
            _enabled = enabled;
            _userData = userData;
        }

        //accessor methods
        public function get id():int {return _id;}
        public function get username():String {return _username;}
        public function get enabled():Boolean {return _enabled;}
        public function get userData():XMLList {return _userData;}

        //mutator methods
        public function set id(id:int):void {_id = id;}
public function set username(username:String):void {_username = username;} public function set enabled(enabled:Boolean):void {_enabled = enabled;} public function set userData(userData:XMLList):void {_userData = userData;}
    }
}


> >> I have a strange issue with data binding not updating when an item in
> >> an ArrayCollection is changed. I'm using Cairngorm and have the
> >> following setup. In my ModelLocator I have a 'users' ArrayCollection > >> that contains 'UserVO' objects. I have a two views that binds their > >> dataProvider to the 'users' AC in the ModelLocator. My UserVO looks
> >> like so:
> >>
> >> package com.jrobinson.model.VO
> >> {
> >> [Bindable]
> >> public class UserVO
> >> {
> >> public var id:int = -1;
> >> public var username:String = null;
> >> public var enabled:Boolean = false;
> >> public var userData:XMLList = null;
> >>
> >>
> >> public function UserVO(user_id:int, uName:String, enabled:Boolean,
> >> d:XMLList)
> >> {
> >> id = user_id;
> >> username = uName;
> >> enabled = enabled;
> >> userData = d;
> >> }
> >>
> >> }
> >> }
> >>
> >> I first have a command that loads all of the users and populates the
> >> AC. This updates the bindings as expected. I then have a second
> >> command that loads the userData portion for a given user. Once
> >> retrieved, I update the given UserVO's userData, but this time, the
> >> bindings fail to update.
> >>
> >> I feel like I've seen this before but can't find where or what the > >> workaround might be. I guess I'm just looking for confirmation that
> >> this should or shouldn't work.
> >>
> >> Thanks!
> >> John
> >>




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

Josh 'G-Funk' McDonald
  -  j...@joshmcdonald.info
  -  http://twitter.com/sophistifunk
  -  http://flex.joshmcdonald.info/





Reply via email to