0

デスクトップとモバイル デバイスをサポートする Flex AIR でビルドされたアプリがあります。

List コンポーネントに Item Renderer を使用する。非常に一般的な機能がいくつかあります。デスクトップ クライアントとモバイル クライアントの唯一の違いは、削除ボタンのトリガーが異なることです。

モバイルで聞いているTransformGestureEvent.GESTURE_SWIPE event

デスクトップでは、アイテムの上にマウスを移動すると、削除 X マークが表示されます。

それ以外はすべて同じですが、これら 2 つのアクションの処理方法が異なるだけです。デスクトップとモバイルの両方で 1 つのアイテムをレンダリングしたくありません。これにより、モバイル デバイスに不要なオーバーヘッドが発生します。したがって、各プラットフォームにアイテム レンダラーがある場合、両方のアイテム レンダラーで余分なコードの余分なオーバーヘッドが発生します。

冗長コードを回避する方法はありますか?

4

1 に答える 1

1

これはテストされていませんが、機能するはずです。これは、3進数を使用して、Capabilitiesクラスを使用して2つのクラスから選択するだけです。

<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 に答える