Обработка событий из пользовательского события ItemRenderer в группе данных - PullRequest
1 голос
/ 01 июля 2010

У меня есть приложение MXML с группой данных следующим образом:

<s:DataGroup id="productSelector"
             dataProvider="{products}"
             itemRenderer="renderers.ProductLineupRenderer"
             >
    <s:layout>
        <s:HorizontalLayout/>
    </s:layout>
</s:DataGroup>

Я хочу знать, когда элементами в моем itemRenderer манипулируют. У меня есть пользовательские события отправки класса itemRenderer.

То, что я использовал, это использовал mx: repeater:

<mx:Repeater id="r" dataProvider="{configuration.products}">
    <components:ProductEncapsulationView 
                    product="{r.currentItem}"
                    highlightProduct="highlightProduct( event.selectedProduct )"
                    unhighlightProduct="clearHighlight()"
                    selectProduct="makeProductSelection( event.selectedProduct )"
</mx:Repeater>

, где я могу легко назначить события, поступающие из класса itemRenderer, в текущий компонент агрегации представления. ( выделите товар , не выделите товар , выберите продукт )

Я не уверен, как это сделать в DataGroup или даже в компоненте List. Но я хотел бы использовать макеты DataGroups и другие замечательные вещи, которые вы получаете с платформой spark.

Ответы [ 3 ]

1 голос
/ 01 ноября 2010

Вот как я это сделал:

    <fx:Script>
<![CDATA[
     import renderers.ProductLineupRenderer;
     import spark.events.RendererExistenceEvent;

     private function onRendererAdd(e:RendererExistenceEvent):void {
          var renderer:ProductLineupRenderer = e.renderer as ProductLineupRenderer;
          renderer.addEventListener("highlightProduct", highlighProduct);
     }

     private function highlightProduct(e:Event):void {
          ...
     }
]]>
</fx:Script>
<s:DataGroup id="productSelector"
             dataProvider="{products}"
             itemRenderer="renderers.ProductLineupRenderer"
             rendererAdd="onRendererAdd(event);">
    <s:layout>
        <s:HorizontalLayout/>
    </s:layout>
</s:DataGroup>
1 голос
/ 01 июля 2010

Чтение из прошлых сообщений на форумах Adobe (http://forums.adobe.com/message/2902862):

Shongrunden показывает, как вызывать события itemRenderer из объекта DataGroup:

<s:ItemRenderer ... click="sendEvent()">
  <fx:Script>
    <![CDATA[
      import spark.components.DataGroup;

      private function sendEvent():void {
        (owner as DataGroup).dispatchEvent(new MyCustomEvent());
      }

    ]]>
  </fx:Script>
  ...
</s:ItemRenderer>

Мне кажется, что я могу получитьэто работает путем добавления пользовательских обработчиков событий во время DataGroup.creationComplete и запуска их из itemRenderer, как описано выше. Поскольку в примере с ретранслятором назначается одна и та же функциональность обработчика для каждого элемента, не имеет значения, кто вызывает функции так долго.как он выполняется на этом уровне.

Он не такой встроенный в MXML, как раньше, требует большего количества обработчиков. Но он позволяет использовать компоненты spark для примера.

0 голосов
/ 12 августа 2010

Вы можете отправлять события от средств визуализации элементов, у которых для свойства bubble установлено значение true.Это означает, что они достигнут группы данных или родителя группы данных, в которую можно добавить прослушиватель.

...