如何解决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>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。