Flex / AS3: привязка данных через свойство, к которому привязаны - PullRequest
0 голосов
/ 08 июня 2011

У меня есть:

класс A: со свойством "data: ArrayCollection".Это мой источник данных (поставщик данных), и у него есть растровые изображения.

класс B: имеет экземпляр A (называемый "Ainst") и вызывает следующий метод: C.init (Ainst.data).Для передачи провайдера данных в объект C.

класс C: имеет ссылку на провайдера данных «data» (из-за метода «init»).Он показывает arrayCollection в Images как: Image.source = data.getItemAt (0).

Но C никогда не обновляет свои изображения, то есть привязка данных не работает с этой схемой.Я поместил метатег [Bindable] во все свойства и даже классы.

класс A:

public class A{ [Bindable]public var data:ArrayCollection; }

класс B:

public class B{ [Bindable]public var Ainst:A; public var Cinst:C; public function init(){ Cinst = new C(); Cinst.init(A.data) } }

класс C:Меню изображения с 3 пунктами (растровые изображения)

            <s:VGroup xmlns:fx="http://ns.adobe.com/mxml/2009" 
                  xmlns:s="library://ns.adobe.com/flex/spark" 
                  xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:local="*"
                  horizontalAlign="center"
                  paddingTop="10"
                  paddingBottom="10"
                  gap="10">


            <fx:Script>
                    <![CDATA[ 
    [Bindable] public var _images:ArrayCollection; 
    public function init( images:ArrayCollection ):void{

                    _images = images;
}   
        ]]>
            </fx:Script>
            <ms:Image id="PreviousButton" smoothBitmapContent="true" width="55" height="55" source="@Embed(source='/../figures/upArrow.png')"/>
                <ms:Image id="TopItem" smoothBitmapContent="true" maintainAspectRatio="true" x="12.5" source="{_images.getItemAt(0)}" />
                <ms:Image id="MiddleItem" smoothBitmapContent="true" maintainAspectRatio="true" x="12.5" source="{_images.getItemAt(1)}"/>
                <ms:Image id="BottomItem" smoothBitmapContent="true" maintainAspectRatio="true" x="12.5" source="{_images.getItemAt(3)}"/><!-- getItemAt(2).image -->
                <ms:Image id="NextButton" smoothBitmapContent="true" width="55" height="55" source="@Embed(source='/../figures/downArrow.png')"/>
            </s:VGroup>

Есть мысли?Благодарю.

Ответы [ 2 ]

1 голос
/ 08 июня 2011

Ваша проблема в том, что функция getItemAt (_images.getItemAt (0)) НЕ привязывается.

0 голосов
/ 08 июня 2011

Взгляните на свой класс A:

public class A{
    [Bindable]
    public var data:ArrayCollection;
}

Свойство data здесь не является статичным.Так что это относится к экземпляру A, но не к A.Теперь взглянем на конструктор B:

public function init(){ 
    Cinst = new C(); 
    Cinst.init(A.data);
}

и его объявление поля:

[Bindable]
public var Ainst:A;

Как вы можете видеть в строке

Cinst.init(A.data);

вы ссылаетесь data как статическое свойство.Вместо этого следует использовать:

public function init(){ 
    Cinst = new C(); 
    Cinst.init(Ainst.data);
}

.

И, пожалуйста, придерживайтесь ActionScript соглашений об именовании и кодировании .Размещайте операторы в отдельных строках и начинайте идентификаторы со строчной буквы.Это позволяет легче читать ваш код.

...