0

我有一个使用 Flex AIR 构建的应用程序,它支持桌面和移动设备。

对 List 组件使用 Item Renderer。有一些非常常见的功能,桌面客户端和移动客户端之间的唯一区别是删除按钮的触发方式不同。

在移动设备上,我正在听TransformGestureEvent.GESTURE_SWIPE event

在桌面上,当鼠标悬停在项目上时,我将显示一个删除 X 标记。

其他一切都是一样的,只是它处理这两个动作的方式不同。我不想同时为桌面和移动设备渲染一个项目,这会给移动设备带来不必要的开销。因此,如果每个平台都有项目渲染器,那么这将导致两个项目渲染器中冗余代码的额外开销。

有什么办法可以避免冗余代码?

4

1 回答 1

1

这是未经测试的,但它应该工作。这只是使用三元在使用 Capabilities 类的两个类之间进行选择。

<s:List itemRenderer="{ ( Capabilitiles.os.toLowerCase().indexOf( 'ios' ) != -1 || Capabilities.os.toLowerCase().indexOf( 'android' ) != -1 ) ? MOBILECLASS : DESKTOPCLASS }" />

或者,您可以在 AS3 中设置它。

private function creationCompleteHandler( e:Event ):void {
    if ( Capabilitiles.os.toLowerCase().indexOf( 'ios' ) != -1 || Capabilities.os.toLowerCase().indexOf( 'android' ) != -1 ) {
        list.itemRenderer = MobileClass;
    }
    else {
        list.itemRenderer = DesktopClass;
    }
}

同样,这是未经测试的。我知道我在尝试设置 itemRenderer 属性时遇到了一些奇怪的问题,所以它可能不喜欢这样。不过,值得一试。

于 2013-01-30T00:19:54.633 回答