Flexlib scheduleViewer ..如何处理项目单击。

| 我正在尝试在应用程序中使用flexlib计划查看器。 我想要它,以便当我单击预定的事件时,它在主应用程序中调用一个函数(这将允许我编辑事件)。但是对于类中内置的此类东西似乎没有任何特定功能,即当我单击事件时没有调度任何事件。 我可以使用\'click \'函数来检测该项目是否已被单击。.并尝试过以下操作:
         private function exerciseClickHandler(event:MouseEvent):void{
            if (exerciseSeries.selectedItem != null){
                //code

            }
        }

     <code:ScheduleViewer id=\"exerciseSeries\" click=\"exerciseClickHandler(event)\" />
此方法不是很可靠,因为如果它仅在第一次使用时有效。.一旦选择了某个项目,它就会保持选中状态,因此在该项目上的所有后续单击都满足条件。 是否可以确定是否单击了事件? 还是我必须扩展该组件并在单击事件时添加某种clickEvent。     
已邀请:
当您单击组件时,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
}
我的意思是您写道,在单击第一个元素之后,所有操作都会停止。并且根据您提供的代码,它必须停止,因为在第一次单击“ 4”之后将不再是“ 5”,因为它已被选中。因此,删除您编写的条件并使用实例。     
我建议您设置一个ChangeWatcher来监视selectedItem(如果要在某个时候允许多项选择,则要注意selectedItems)。例:
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();
}
一种替代方法是,每当用户单击时,在鼠标坐标下的视图层次结构中搜索事件类的实例。
//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.
   }
}
其中EventClass是代表事件的对象的类     
我也遇到过类似的问题,有时您可以通过用Box包装对象并将click事件放在Box上来解决问题。如果您还没有尝试过,那么这是一种便宜,简单的解决方案(如果它对您有用)。
<mx:Box click=\"exerciseClickHandler(event)\">
 <code:ScheduleViewer id=\"exerciseSeries\"  />
</mx:Box>
    

要回复问题请先登录注册