2010-11-17 16 views
3

Comme vous le savez, nous pouvons construire une application RIA basée sur flex. En outre, nous pourrions construire une application de bureau basée sur AIR. J'ai une question, si nous voulons construire Web & application de bureau simultanément. Pouvons-nous utiliser les mêmes codes pour expédier notre production au bureau &?Partage de code entre Flex et AIR

Répondre

5

Si vous concevez votre application, vous ne devriez avoir aucun problème à partager 99% de votre base de code entre vos versions Flex et AIR.

  • Vous aurez besoin d'un MXML d'application distincte pour les versions Flex/AIR comme AIR utilise un WindowedApplication et Flex utilise Application

  • Vous aurez besoin de faire abstraction de votre utilisation de toutes les API AIR uniquement. C'est-à-dire, n'importe quelle classe, propriété ou méthode marquée avec l'icône AIR-only (http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/images/AirIcon12x12.gif) dans the Online Documentation. Vous pouvez trouver ce processus plus facile si vous utilisez un conteneur Injection de dépendance tel que Swift Suspenders. Vous pouvez également diviser votre service définitions en deux arbres sources différents. Votre projet AIR et votre projet Flex partageraient alors un chemin source, mais aussi leur propre chemin source. De cette façon, le code qui accède à com.application.MyService serait partagé entre AIR et Flex, mais l'implémentation de com.application.MyService différerait en fonction du «chemin de source de service» utilisé.

  • Vous pouvez trouver utile de configurer chaque construction avec un indicateur de compilation tel que -define+=CONFIG::AIR. Cela vous permet d'utiliser la compilation conditionnelle pour que vous puissiez compiler le même fichier pour les deux versions, mais inclure un code spécifique pour la génération AIR.

Voici un exmaple de compilation conditionnelle:

public function getMyService() : IMyService 
{ 
    CONIFG::AIR 
    { 
     return new MyServiceThatUsesAnAIROnlyAPI(); 
    } 

    return new FallbackServiceForFlex(); 
} 

Malheureusement, il n'y a aucun moyen de « Négation » un drapeau conditionnel (.-À-dire !CONFIG::AIR) de sorte que vous devez soit être intelligent sur votre utilisation de il, ou inclure deux drapeaux (CONFIG::AIR et CONFIG::FLEX)

0

oui, vous pouvez le faire. Il y a certaines conditions que vous devez contrôler dans le code. N'oubliez pas que si l'application est également une application flexible, il s'agira d'une application à fenêtre unique. pour chaque projet, je ferai besoin de ce que je crée 3 projets

  1. base de code

    (le contrôle principal est un groupe ou d'une toile)

  2. exportateur flex => quand vous construisez cela, vous finirez avec une application Flex il a un contrôle de # 1 dans l'application principale

  3. air exportateur => quand vous construisez cela vous va se retrouver avec une application air il a un contrôle de # 1 dans la fenêtre principale.

1

Je suis surpris personne ne dit encore, mais voilà comment je le ferais:

  1. Créer un projet de bibliothèque. ce projet inclura tout votre code partagé .
  2. Créer un projet Flex pour le déploiement web
  3. Créer un AIR pour le déploiement du projet AIR

Tant le Flex et les projets AIR peuvent référencer et utiliser le code dans le projet de bibliothèque. Le projet AIR peut utiliser la fonctionnalité spécifique à AIR sans affecter le projet Web.

Si vous devez effectuer différentes actions différemment selon que vous utilisez le projet Web ou le projet AIR, vous pouvez créer des interfaces dans le projet de bibliothèque et les implémenter dans le projet principal pour utiliser les API respectives.