Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在某些情况下,无法单击Spark List ItemRenderer上的按钮_List_Apache Flex_Onclick_Itemrenderer - Fatal编程技术网

在某些情况下,无法单击Spark List ItemRenderer上的按钮

在某些情况下,无法单击Spark List ItemRenderer上的按钮,list,apache-flex,onclick,itemrenderer,List,Apache Flex,Onclick,Itemrenderer,我有一个带有自定义渲染器的Spark列表。当用户滚动列表中的项目时,行中会出现左右按钮,允许用户更改正在渲染的值的值。例如,如果有5个优先级(1到5),则左键减小该值,右键增大该值 简要说明:它们不是真正的按钮,而是设计成按钮的图像 现在,除了在一个特定条件下,这一切都可以正常工作:如果用户选择该行,然后将光标移出该行,然后返回该行,当用户单击任一按钮时,什么也不会发生。尽管这个场景听起来很复杂,但测试用户一直在做这件事!这对他们来说真的很沮丧 我发现了这种行为的原因:按钮仅显示在项目渲染器的悬

我有一个带有自定义渲染器的Spark列表。当用户滚动列表中的项目时,行中会出现左右按钮,允许用户更改正在渲染的值的值。例如,如果有5个优先级(1到5),则左键减小该值,右键增大该值

简要说明:它们不是真正的按钮,而是设计成按钮的图像

现在,除了在一个特定条件下,这一切都可以正常工作:如果用户选择该行,然后将光标移出该行,然后返回该行,当用户单击任一按钮时,什么也不会发生。尽管这个场景听起来很复杂,但测试用户一直在做这件事!这对他们来说真的很沮丧

我发现了这种行为的原因:按钮仅显示在项目渲染器的悬停和选定状态中。这就是我想要的——除非用户的指针能够按下按钮,否则按钮不应该可见。在列表中选择项目后,渲染器的状态变为“选定”。再次单击不会更改状态。将指针移出行,然后再次移入并单击(在已选定的行上)可使行的状态从“选定”变为“正常”(鼠标按下时)并返回“选定”(鼠标向上时)。我觉得这很奇怪!这意味着按钮在正常状态下(应该是正常状态)实际上会消失,因此没有被单击)

我曾考虑过,不知何故,我可以在项目渲染器上以Z顺序将图像“向上”,因此它们会在项目渲染器获取单击事件之前拦截该事件,但我无法使其正常工作

有人能帮忙吗

如果有帮助,下面是ItemRenderer中的一个片段:

<s:HGroup width="150" verticalAlign="middle" verticalCenter="0">
  <s:Image id="previousItemButton" buttonMode="true" source="{_leftArrow}" width="16" height="16" visible.normal="false" visible.hovered="true" visible.selected="true" click="previousClicked(event)"/>
  <s:Label text="{data.outputFormat.value}" width="100%" click="nextClicked(event)"/>
  <s:Image id="nextItemButton" buttonMode="true" source="{_rightArrow}" width="16" height="16" visible.normal="false" visible.hovered="true" visible.selected="true" click="nextClicked(event)"/>
</s:HGroup>

这导致了问题,并移除了卷展栏,该方法修复了问题。我不知道为什么会在mouseDown上启动一个滚动

你有没有试过用一个真正的按钮,而不仅仅是一个图像?没有。我想同样的事情会发生,因为这两个图像消失了,因为它们在“正常”状态下不可见。试试看。在图像上单击事件与实际按钮不同。它们具有不同的行为,可能会影响您的应用程序。你也很难对你的问题做出正确的评论,因为你没有展示很多实际发生的事情和少量的代码。火花按钮的行为完全相同。行上的鼠标按下事件使ItemRenderer状态为“正常”,因此按钮消失(请参阅上面代码中的visible.Normal=“false”)。按钮不见了,就不能点击了。鼠标释放时,项目渲染器状态返回“选定”,按钮重新出现。GAH!我已经解决了问题,这与图像/点击或按钮无关!查看我的ItemRenderer,最高的组件上有一个卷展栏侦听器。当激活此功能时,执行以下功能:if(this.selected)this.selected=false。这是应该删除的旧冗余代码!啊!我不知道为什么,它在老鼠身上做了什么。从中学到的两件事:始终清理无意义的代码,并创建一个简单的示例来演示您的问题!感谢J_A_X调查此事-抱歉浪费您的时间。
protected function hgroup1_rollOutHandler(event:MouseEvent):void {
  if (this.selected) {
    this.selected = false;
  }
}