Показать сообщение отдельно
Старый 28.08.2009, 01:14
adi.belis вне форума Посмотреть профиль Отправить личное сообщение для adi.belis Найти все сообщения от adi.belis
  № 9  
Ответить с цитированием
adi.belis

Регистрация: Aug 2009
Сообщений: 53
Цитата:
Как возможное решение - Создайте пустой класс mx.collections.ArrayCollection с теми же свойствами и методами
в общем не работает отпишу попорядку


/**
*создаю "ArrayCollection" для Флеша
*/

1.1 создаю в флексе "Flex Library Project".
1.2 в библиотеке "src" создаю свой класс "ArrCollection ".
1.3 пишу код :
Код AS3:
package
{
	import mx.collections.ArrayCollection;
 
	public class ArrCollection
	{
		public function ArrCollection()
		{
			new ArrayCollection();
		}
	}
}
1.4 сохраняем, в папке Bin лежит готовый ArrayCollection.swc

/**
*добавляю "ArrayCollection" в Флеш
*/
2.1 в Флеш Publish settings > flash >Script > settings > Library Path
добавляю ArrayCollection.swc .

/**
*создаю компонент для Флекса
* в компоненте имеется textFild для отображения длины коллекции массивов.
*/

3.1 в Флаш добавляю новый объект, его код :
Код AS3:
package com
{
	import mx.flash.UIMovieClip;
	import mx.collections.ArrayCollection;
 
	public class TestComponent extends UIMovieClip
	{
		protected var myArray:ArrayCollection;
		public function TestComponent ()
		{
 
		}
		[Inspectable(category = Data,type = "Array")]
		public function set dataProvider (arr:ArrayCollection):void
		{
			myArray = arr;
			textFild.text =String(myArray.length);
		}
	}
}
3.2 делаю из него SWC файл (command > Convert Symbol to Flex Component > publish)

/**
*наследую и переопределяю
*/

4.1 в Флекс в "Libs" добавляю мой компонент "TestComponent.swc".
4.2 создаю новый класс, наследую от "TestComponent.swc", переопределяю функцию.
Код AS3:
package com
{
	import flash.events.Event;
	import mx.collections.ArrayCollection;
 
	public class SuperComponent extends TestComponent
	{
	    public function SuperComponent ()
	    {
	    }
	    [Bindable("dataProviderChange")]
	    public override function set dataProvider(value:ArrayCollection):void
                      {
		myArray = value;
		textFild.text =String(myArray.length);
		dispatchEvent(new Event("dataProviderChange"));
                      }
	}
}
вроде-бы все по инструкции .
проверяю в Флексе :

Код:
<?xml version="1.0" encoding="utf-8"?>
<s:Group 
	xmlns:fx="http://ns.adobe.com/mxml/2009" 
	xmlns:s="library://ns.adobe.com/flex/spark" 
	xmlns:mx="library://ns.adobe.com/flex/halo"  
	width="400" height="300" creationComplete="initApps(event)" xmlns:com="com.*">
	<fx:Script>
		<![CDATA[
			import com.customTest;
			import mx.collections.ArrayCollection;
			import mx.events.FlexEvent;

            [Bindable]
			private var tempArray:ArrayCollection =new ArrayCollection();
			protected function initApps(event:FlexEvent):void
			{
				tempArray.addItem("La-la");
			}
		]]>
	</fx:Script>
	<mx:Label x="23" y="33" text="Label" id="_label"/>
	<com:customTest id="yo" x="28" y="57" dataProvider="{tempArray}" />
</s:Group>
получаю значение 0 не апдейтится


Последний раз редактировалось adi.belis; 28.08.2009 в 01:28.