问题描述
|
我正在尝试在应用程序中使用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>