2013-08-14 3 views
0

저는 사람들이 자신의 음식 일정을 만들 수있는 프로그램을 만들고 있습니다. 또한 음식 일정 당 총 칼로리 양을 계산하고 싶습니다. 그래서 일단 사람들이있는 ArrayCollection에 저장됩니다 목록에 항목을 추가 할 수 있습니다 떨어져한 열의 모든 값을 얻고 합계를 계산하는 방법

는 :

<s:List includeIn="State2" x="12" y="533" width="428" height="157" dataProvider="{acKoop}" 
      enabled="true" change="totalcal(event)"> 
     <s:itemRenderer> 
      <fx:Component> 
       <mx:Label text="{data.Type} {data.Kcal}" /> 
      </fx:Component> 
     </s:itemRenderer> 
    </s:List> 

나는 data.Kcal의 모든 값을 검색 한 다음의 합을 만드는 기능을합니다. 여기

public function totalcal(event:Event):void{ 
      var price:Number=acKoop[event.columnIndex].Kcal; 
      total += price; 

     } 
+0

이 ** [LINK] (https://dl.dropboxusercontent.com/u/108036807/ExListRenderer_01.swf) **를 확인하고 목록 구성 요소를 클릭하여 유용 할 지 말해주세요. 어쨌든 나는 변화 이벤트에서 총계를 다시 계산해야하는 이유를 알지 못합니다 ** 렌더러 ** ** 라벨 **이기 때문에 항상 동일합니다. 정보는 데이터 제공자에 있기 때문에 이전에 할 수 있습니다. –

+0

그럼이게 완벽합니다. 그 코드를 알려주시겠습니까? –

답변

0

내가 보내했다 link의 코드는, 어쩌면 도움이 될 것입니다 :

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="init()"> 

    <fx:Script> 
     <![CDATA[ 
      import mx.collections.ArrayCollection; 
      import mx.controls.Alert; 
      [Bindable] 
      private var acKoop:ArrayCollection = null; 

      public function init():void{ 
       var arr:ArrayCollection = new ArrayCollection(); 
       var obj:Object = new Object(); 
       obj.Type = "TYPE1"; 
       obj.Kcal = 10; 
       arr.addItem(obj); 
       obj = new Object(); 
       obj.Type = "TYPE2"; 
       obj.Kcal = 50; 
       arr.addItem(obj); 
       acKoop = arr; 
      } 

      public function totalcal(event:Event):void{ 
       var i:Number = 0; 
       for each(var obj:Object in ArrayCollection(List(event.currentTarget).dataProvider)){ 
        i = i + obj.Kcal; 
       } 
       Alert.show("Total of Kcal = " + i.toString()); 
      } 
     ]]> 
    </fx:Script> 

    <s:List dataProvider="{acKoop}" 
      enabled="true" change="totalcal(event)"> 
     <s:itemRenderer> 
      <fx:Component> 
       <mx:Label text="{data.Type} {data.Kcal}" /> 
      </fx:Component> 
     </s:itemRenderer> 
    </s:List> 
</s:Application> 

기본적으로 변경 이벤트에 나는 이벤트에서 dataProvider의 정보를 가지고와 계산 각 루프의 경우 인 TOTAL 이것이 유용하게되기를 바랍니다.

+0

이제 계산을 시작하기 전에 목록을 먼저 클릭해야합니다. 목록을 클릭하지 않고 각 루프마다 어떻게 시작할 수 있습니까? –

+0

@MunlauYau, 이전에 계산이 필요하다면, ** init() ** 메소드의 마지막에 ** totalcal() ** 메소드의 코드를 넣고'ArrayCollection (List (event.currentTarget) .dataProvider) ''acKoop'. 이것을 시도한 다음, 이것이 작동하는지 말해주십시오. 데이터 제공자를 몇시에로드합니까? –

관련 문제