2010-11-29 4 views
0

Flextras Calendar dataProvider에서 사용자 정의 Day Render를 작성했으며 사용자 정의 데이터에 액세스하려고합니다. 여기 Flextras Calendar의 DayRender에서 사용자 정의 데이터 액세스

내가 여기
<flextras:Calendar 
    id="calendar" 
    dayRenderer="com.healthways.healthhonors.itemrenderers.MyAwesomeDayRenderer" 
    monthHeaderRenderer="com.healthways.healthhonors.itemrenderers.MyAwesomeMonthRenderer" 
    displayedYear="2010" 
    displayedDate="1" 
    displayedMonth="10" 
    dateField="data" 
    width="100%" 
    height="100%" 
    /> 

가 여기에 캘린더의 dataProvider

myArrayCollection = new ArrayCollection([{date:new Date(), data:myObject}]) 

에 전달 누가 받 ArrayCollection에 마녀 내가 만드는 오전 객체와 storying의 종류 무엇이다가 그 코드입니다 내 주간 렌더링의 모습

package com.healthways.healthhonors.itemrenderers 
{ 
import com.healthways.vo.DateVO; 
import nl.demonsters.debugger.MonsterDebugger; 
import com.healthways.vo.MedicationVO; 
import mx.collections.ArrayCollection; 
import mx.utils.ObjectUtil; 
import com.flextras.calendar.IDayDataVO; 
import com.flextras.calendar.ICalendarDataVO; 
import mx.events.ResizeEvent; 
import mx.events.FlexEvent; 
import com.healthways.components.DailyPieChart; 
import com.flextras.calendar.defaultRenderers.DayRenderer; 

/** 
    * @author Matthew Wallace 
    */ 
public class CalendarMedicationRenderer extends DayRenderer 
{ 
    private var chart : DailyPieChart; 
    public function CalendarMedicationRenderer() 
    { 
    init(); 

    } 

    private function init() : void 
    { 
    percentWidth = 100; 
    percentHeight = 100; 

    chart = new DailyPieChart(); 
    this.addElement(chart);  

    addEventListener(ResizeEvent.RESIZE, onResize); 
    addEventListener(FlexEvent.CREATION_COMPLETE, onCreationComplete); 
    } 

    private function onCreationComplete(event : FlexEvent) : void 
    { 
     /* here I would like to set chart display object visible 
          based on if I have custom data in the renderer or not */ 
    } 

    private function onResize(event : ResizeEvent) : void 
    { 
    chart.x = (width * 0.5) - 25; 
    chart.y = (height * 0.5) - 25; 
    } 


    override protected function createExpandDayButton() : void 
    { 
    //super.createExpandDayButton(); 
    } 

    override protected function createDayTextField() : void 
    { 
    //super.createDayTextField(); 
    } 


} 
} 

내가 이해해야 할 사항 렌더러가 맞춤 데이터를 가지고있어 렌더러 생성에 대한 일부 로직을 완료 할 수 있는지 확인하는 방법.

덕분에, 마태 복음

답변

1

Flextras CalendardayRenderer 개념적, 플렉스 목록 기반 클래스에 itemRenderers를 모델이다. 이는 현재 데이터를 대체하여 월, 일 또는 연도를 변경할 때 렌더러가 다시 사용될 수 있음을 의미합니다.

현재 dayRenderer에서는 데이터가 설정되기 전에 init() 메소드를 실행하고있는 것 같습니다.

creationComplete를 사용하는 대신 데이터를 만들거나 변경하는 경우 변경 사항을 적용하려면 Flex 구성 요소 수명주기에 연결해야합니다. dataProvider를 검사하려면 dayData 객체를 살펴 봐야합니다.

protected var dayDataChanged : Boolean = false; 

override public function set dayData(value:IDayDataVO):void{ 
    super._dayData = value; 
    this.dayDataChanged = true; 
    this.invalidateProperties(); 
} 

당신은 또한 아무것도가 변경되었는지 확인하기 위해 새 것으로 현재의 dataProvider을 비교할이 좀 더 고급 확인하고 수의 invalidateProperties() 조건이있는 경우 :이 같은 설정 방법, 뭔가를 오버라이드 (override) 할 가지고있다/가지지 않았다. 의 commitProperties에서

()는 다음과 같이 뭔가를 시도 :

if(this.dayDataChanged == true){ 
// access this.dayData.dataProvider and perform whatever processing is needed 
this.dayDataChanged = false; 
} 

나는 현재의 dataProvider 항목이 추가됩니다 날짜는 특별하다 '오늘'로 설정됩니다. 날짜는 일반적으로 현재 날짜로 동적으로 설정되지 않습니다.

또한 추가 할 것입니다. dataProvider의 dateField는 'date'이지만 이름을 지정한 dateField 속성은 'data'입니다. 이 상황에서, Calendar는 dayRenderer에 dataPRovider의 데이터를 보내지 않을 수 있습니다. 왜냐하면 어떤 날이 끝날 지 결정할 수 없기 때문입니다.

관련 문제