Hi,

 

you have to use namespace as well. Here is an example of a SortedList I use in testproject. You can enumerate the ListKeys with for … in and the Items with for each … in.

 

Harald

 

package Helper {

      import flash.util.Proxy;

      import flash.util.flash_proxy;    

 

      use namespace flash_proxy;

     

      public class SortedList extends Proxy {

            private var _Values:Object;

            private var _Keys:Array;

            private var _Sorted:Boolean;

            private var _Count:int;

           

            public function Add(key:String, value:Object):void {

                  if( _Values.hasOwnProperty(key) ) throw new Error("Key allready exists.");

                  _Values[key] = value;

                  _Count++;

                  _Sorted = false;

            }

            public function Clear():void {

                  _Values = new Object();

                  _Sorted = false;

                  _Count = 0;

            }

            public function ContainsKey(key:String):Boolean {

                  return _Values.hasOwnProperty(key);

            }

            public function get Count():int {

                  return _Count;

            }

            public function Item(keyindex:Object):Object {

                  return this.getProperty(_GetKey(keyindex));

            }

            public function Key(index:int):String {

                  if( index < 0 || index >= this.Count ) throw new RangeError();

                  return this.Keys[index];

            }

            public function get Keys():Array {

                  if( !_Sorted ) {

                        _Keys = new Array();

                        for(var _Key:String in _Values) {

                             _Keys.push(_Key);

                        }                      

                        _Keys.sort();

                  }

                  return _Keys;

            }

            public function Remove(keyindex:Object):void {

                  var _Key:String = _GetKey(keyindex);

                  if( !_Values.hasOwnProperty(_Key) ) _ThrowError();

                  delete _Values[_Key];

                  _Sorted = false;

                  _Count--;

            }

           

            override flash_proxy function getProperty(name:*):* {

                  if( name is QName ) {

                        return _Values[name];

                  }

                  else {

                        var key:String = _GetKey(name);

                        if( !_Values.hasOwnProperty(key) ) _ThrowError();

                        return _Values[key];

                  }

            }

            override flash_proxy function setProperty(name:*, value:*):void {

                  if( name is QName ) {

                        _Values[name] = value;

                  }

                  else {

                        var key:String = _GetKey(name);

                        if( !_Values.hasOwnProperty(key) ) _ThrowError();

                        _Values[key] = value;

                  }

            }

            override flash_proxy function nextNameIndex(index:int):int {

                  if( index < _Count ) {

                        return index + 1;

                  }

                  else {

                        return 0;

                  }

            }

            override flash_proxy function nextName(index:int):String {

                  return this.Keys[index -1];

            }

            override flash_proxy function nextValue(index:int):* {

                  return getProperty(this.Keys[index-1]);

            }

 

            //Private

            private function _ThrowError():void {

                  throw new Error("Item doesn't exists.");

            }

            private function _GetKey(keyindex:Object):String {

                  if( isNaN(Number(keyindex)) ) {

                        return (keyindex as String);

                  }

                  else {

                        var _index:int = int(Number(keyindex));

                        if( _index < 0 || _index >= this.Count ) throw new RangeError();

                        return this.Keys[_index];

                  }

            }

 

            // Constructor

            public function SortedList() {

                  _Values = new Object();

                  _Sorted = false;

                  _Count = 0;

            }          

      }

}


Von: flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] Im Auftrag von Renaun Erickson
Gesendet: Mittwoch, 15. März 2006 08:49
An: flexcoders@yahoogroups.com
Betreff: [flexcoders] Flex2 flash_proxy/Proxy getProperty and Binding

 

The sample code is located below.  I am trying to find a way to bind
dynamic attributes (when using Proxy class).  I can't get the dynamic
properties to bind, any suggestions or help would be appreciated.

Renaun

Proxy Class:
package {
      import flash.util.flash_proxy;
      import flash.util.Proxy;

      dynamic public class SomeClass extends Proxy {

            public var _dynamicAttributeArray:Array;

            public function SomeClass() {
                  _dynamicAttributeArray = new Array();
            }           
     
            flash_proxy override function getProperty( name : * ) : * {
                  return _dynamicAttributeArray[ name ];
            }
     
            flash_proxy override function setProperty(name:*, value:*):void {
                  _dynamicAttributeArray[ name ] = value;
            }
      }
}


Now if I have:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.macromedia.com/2005/mxml" xmlns="*"
      creationComplete="initApplication()">
      <mx:VBox width="100%" height="100%">
            <mx:TextArea width="100%" height="50%" id="output" text="{
SomeClass(someClass).newAttribute }"/>
            <mx:Button label="Change" click="someClass.newAttribute = '' + new
Date();"/>
      </mx:VBox>
      <mx:Script>
            <![CDATA[
                  import SomeClass ;
            public var someClass:SomeClass;
           
                  public function initApplication()
                  {
                      someClass = new SomeClass();
                      someClass.newAttribute = "I am New";
                      //output.text = someClass.newAttribute;
                  }

            ]]>
      </mx:Script>
</mx:Application>






--
Flexcoders Mailing List
FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com




SPONSORED LINKS
Web site design development Computer software development Software design and development
Macromedia flex Software development best practice


YAHOO! GROUPS LINKS




Reply via email to