2011-04-14 7 views
2

내 응용 프로그램에 flexlib schedule viewer을 사용하려고합니다.Flexlib scheduleViewer .. 항목에 대한 클릭을 처리하는 방법

예약 된 이벤트를 클릭하면 내 기본 응용 프로그램의 기능을 호출하므로 이벤트를 편집 할 수 있습니다. 그러나 이벤트를 클릭 할 때 이벤트가 전달되지 않는 즉, 클래스에 내장 된 것과 같은 기능에 대한 특정 기능이없는 것으로 보입니다.

나는 항목에 .. 클릭 된이 같은 것을 시도 감지하기 위해 '클릭'기능을 사용할 수 있습니다

:

  private function exerciseClickHandler(event:MouseEvent):void{ 
      if (exerciseSeries.selectedItem != null){ 
       //code 

      } 
     } 

    <code:ScheduleViewer id="exerciseSeries" click="exerciseClickHandler(event)" /> 

이 방법은 매우 신뢰할 수 없습니다 그것은 단지를 작동하는 경우 때문에 첫 번째 ... 한 번 항목을 선택하면 해당 항목에 대한 모든 다음 클릭이 조건을 충족하도록 선택 상태를 유지합니다.

이벤트가 클릭되었는지 여부를 확인하는 방법이 있습니까?

또는 이벤트를 클릭 할 때 구성 요소를 확장하고 일종의 clickEvent를 추가해야합니까?

답변

3

구성 요소를 클릭하면 exerciseClickHandler가 실행되기 때문에 작동하지 않습니까? 대신

private function exerciseClickHandler(event:MouseEvent):void{ 
    if (exerciseSeries.selectedItem != null){ 
      //code 
    } 
} 

쓰기의

private function exerciseClickHandler(event:MouseEvent):void{ 
    switch (exerciseSeries.selectedItem) 
    { 
      //code 
      case xy: 
      break; 
    } 
} 

또는

private function exerciseClickHandler(event:MouseEvent):void{ 
    //do something with exerciseSeries.selectedItem 
} 

내 말하는 첫 번째 요소를 클릭 한 후 모든 것이 정지 쓴 것입니다

. 그리고 당신이 제공 한 코드에 따르면, 첫 번째 클릭 이후 beacuse는 exerciseSeries.selectedItem이 더 이상 null이 아니기 때문에 더 이상 선택되지 않습니다. 따라서 작성한 조건문을 제거하고 인스턴스를 사용하십시오.

+0

나는 약간의 해킹 방법 (클릭 한 직후 항목 선택 취소)에서 아래 주석에 언급했듯이 효과가있다. 그러나 이것은 확실히 더 우아하다! – Damon

1

나는 selectedItem (또는 어떤 시점에서 다중 선택을 허용하려는 경우 selectedItems)을 주시하기 위해 ChangeWatcher를 설정하는 것이 좋습니다. 예 :

protected exerciseSeriesCreationCompleteHandler(event:FlexEvent):void{ 
    ChangeWatcher.watch(this,['exerciseSeries','selectedItem'], handleChange_SelectedItem); 
} 

protected function handleChange_SelectedItem(event:PropertyChangeEvent):void{ 
    // Either 
    dispatchedEvent(//some custom event); 
    // Or 
    someDirectMethodCall(); 
} 

대안은 마우스를 할 때마다 사용자가 클릭을 좌표에있는 뷰 계층 구조에서 이벤트 클래스의 인스턴스를 검색하는 것입니다. EventClass 나는 비슷한 문제가 있었다 때때로 당신은 상자와 객체를 포장하고 상자에서 클릭 이벤트를 넣어 함께하여 얻을 수

+0

실제로는 좀 더 간단한 방법으로 끝내 었습니다. 선택한 항목을 선택하면 null로 선택 항목이 선택되었습니다. 항목을 선택할 수 없기 때문에 완벽하지는 않습니다.하지만 내 용도로만 잘 작동합니다! – Damon

0

이벤트를 나타내는 개체의 클래스는

//Attach this click handler to the component 

    private function handleClick(event : MouseEvent) : void { 
     var obj : *EventClass*= null; 
     var applicationStage : Stage = FlexGlobals.topLevelApplication.stage as Stage; 

     var mousePoint : Point = new Point(applicationStage.mouseX, applicationStage.mouseY); 
     var objects : Array = applicationStage.getObjectsUnderPoint(mousePoint); 

     for (var i : int = objects.length - 1; i >= 0; i--) { 
      if (objects[i] is *EventClass*) { 
       obj = objects[i] as *EventClass*; 
       break; 
      } 
     } 

    if(obj is *EventClass*){ 
     //Dispatch some custom event with obj being the item that was clicked on. 
    } 
} 

. 아직 시도하지 않았다면, 싸고 쉬운 수정 (그것이 효과가 있다면)입니다.

<mx:Box click="exerciseClickHandler(event)"> 
<code:ScheduleViewer id="exerciseSeries" /> 
</mx:Box> 
관련 문제