Phi*_*hil 5 apache-flex list onclick itemrenderer
我有一个带有我自己的自定义渲染器的Spark列表.当用户滚动列表中的项目时,左侧和右侧按钮出现在行中,允许用户更改正在呈现的值的值.例如,如果有5个优先级(1到5),则左按钮减小值,右按钮增加值.
快速注意:它们不是真正的按钮,而是s:图像设计像按钮一样工作.
现在这个工作正常,除了在一个特定条件下:如果用户选择行,然后将光标移出行,然后返回到行,当用户单击任一按钮时,没有任何反应.即使这种情况听起来令人费解,但测试用户仍然会这样做!这对他们来说真的很令人沮丧.
我发现了这种行为的原因:按钮仅显示在项呈示器的悬停和选定状态中.这就是我想要发生的事情 - 按钮不应该是可见的,除非用户的指针能够按下它们.在列表中选择项目时,渲染器的状态将转到选中状态.再次单击不会更改状态.将指针移出行,然后再次返回并单击(在已选择的行上)使行的状态从选定状态变为正常状态(鼠标按下时)并返回到选定状态(在鼠标按下时).我发现这很奇怪!这意味着按钮实际上在处于正常状态时(它应该)因此没有被点击而消失.
我曾经考虑过,不知何故,我可以在项目渲染器的Z顺序中将图像"更高",因此它们会在项目渲染器获取之前拦截click事件,但我无法使其工作.
有人可以帮忙吗?
如果有帮助,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>
Run Code Online (Sandbox Code Playgroud)
更新:
该问题是由构成ItemRenderer的组件的最高级别上的虚假rollOut事件引起的.这个rollOut称为一个方法,它包括:
protected function hgroup1_rollOutHandler(event:MouseEvent):void {
if (this.selected) {
this.selected = false;
}
}
Run Code Online (Sandbox Code Playgroud)
这导致了问题并删除了rollOut,该方法解决了这个问题.我不知道为什么在mouseDown上激活转出的原因.
| 归档时间: |
|
| 查看次数: |
1049 次 |
| 最近记录: |