L'invocation d'une fonction de composants

Si vous appelez une fonction de composant en utilisant le tag CFINVOKE, ColdFusion crée une instance de composant, et appelle la fonction nommée dans l'attribut method. En substance, ColdFusion instancie un objet de la classe de cette composante, mais le nom de cet objet est invisible pour vous. (It's interne référencé par le serveur ColdFusion.) Si vous utilisez CFINVOKE faire appel de trois des fonctions d'un composant ColdFusion dans un modèle unique, comme indiqué dans le code, ColdFusion Server crée trois instances distinctes de ce composant pour vous donner ce que vous voulez, et c'est pas très efficace.


   
   
   
   
   
   
   
 
  

La bonne façon d'appeler des fonctions d'un composant à plusieurs reprises à partir d'un modèle unique est d'instancier séparément un objet avec un nom officiel et ensuite appeler les fonctions de celui-là par exemple que vous en avez besoin. Le code montre ce principe en action. Notez que l'attribut de composant des références tag CFINVOKE une instance de l'élément plutôt que le composant lui-même.


   

   
   
   
   
   
   
 

Vous créez une instance unique de la composante de l'entreprise qui persiste aussi longtemps que la demande de la page actuelle dure, puis vous appelez simplement les fonctions de cette instance une autant de fois que vous avez besoin. Après la demande de page en cours prend fin, ColdFusion détruit automatiquement l'instance que vous créez. (Dans la partie suivante, vous apprendrez comment rendre votre occurrences du composant vivre plus longtemps.) Utilisation de la balise CFOBJECT n'est pas la seule façon d'instancier un objet. La fonction CreateObject () retourne un objet aussi bien. Les trois lignes suivantes du code, par exemple, produisent les mêmes résultats:

 mycompany = CreateObject ( "Component", "Company"); 

De même, en utilisant CFINVOKE n'est pas le seul moyen d'appeler une fonction composant. Après avoir créé une instance d'un composant, vous pouvez appeler ses méthodes en utilisant la même notation pointée. Le code, par exemple, renvoie la liste des entreprises produit par le ListCompanies fonction à une variable nommée listOfCompanies.

 mycompany = CreateObject ( "Component", "Company"); listOfCompanies = myCompany.ListCompanies ( 'A'); 

En fait, le code est probablement la manière la plus populaire de travailler avec les fonctions des composants pour les développeurs ColdFusion qui sont versés dans les langages orientés objet, comme la syntaxe est très proche de la façon dont Java et C + + instancier des objets et d'appeler leurs méthodes. Vous pouvez accéder directement aux fonctions des composants via des formulaires et des URL, mais les résultats sont pratiquement sans valeur. Au lieu de définir une valeur de retour pour passer de votre fonction à l'appel de fonction qui l'invoque, vous devez pousser contenu affichable directement hors du corps de la fonction, comme indiqué dans le code.

 SELECT CompanyID, Société, Adresse, Ville, Etat, code postal, Observations de la société ORDER BY CompanyName  

# # CompanyName:
# # Comments

Ce type de codage est une chose mauvaise, folks. Ne le faites pas. Le pouvoir réel du contenu des fonctions de production, qu'elles soient locales à un modèle ou encapsulé dans un composant, vient de rentrer contenu contenu dans une variable complexe d'un type de données spécifique et à la fusion puis le contenu avec le code de présentation. Séparation de la logique de présentation (et, par extension, les données de présentation) doit être votre mantra. Si vous devez absolument créer une fonction de ce contenu directement sorties, supprimez l'attribut de la balise ReturnType CFFUNCTION et ajouter de sortie = "Oui". Ne jamais avoir à la fois un type de retour et la sortie directe dans la même fonction. L'attribut de sortie a réellement les trois états suivants:

Output = "Oui" traite la fonction entière comme si elle était à l'intérieur d'une paire tag cfoutput.

Output = "Non" traite la fonction entière comme si elle était à l'intérieur d'une paire tag CFSILENT.

L'élimination de l'attribut Sortie permet d'entièrement tags cfoutput explicite intérieur de la fonction de sortie de fuir à l'appelant.

Nous n'avons pas été explicite sur les sorties attribuent encore parce que c'est un article de l'apprentissage, et nous voulons éliminer le code supplémentaire autant que possible, afin que vous puissiez vous concentrer votre concentration sur des sujets spécifiques. Dans les parties précédentes de cet article, vous apprendrez comment créer une instance nommée d'un composant, vous renseigner sur les rudiments de propriétés de l'instance dans un composant de cette portée, et vous apprendrez les différences entre les méthodes de classe et méthodes d'instance. Maintenant de mettre ces théories en action! L'instance de l'élément que vous créez dans le code ne persiste que tant que la demande de la page, puis le serveur ColdFusion détruit automatiquement. Si vous voulez travailler avec un composant persistant passé une demande de page unique, vous devez tout simplement le créer dans un champ d'application persistante qui vit plus d'une demande, comme indiqué dans le code.

 Session.myCompany = CreateObject ( "Component", "Company"); listOfCompanies = Session.myCompany.ListCompanies ( 'A'); 

Or, cette instance persiste tant que la session utilisateur ne, ce qui signifie que ses propriétés faire aussi. Cela signifie que vous pouvez exécuter une ColdFusion modèle qui crée une instance de la composante de l'entreprise, aller prendre une tasse de café, de l'exécution d'une seconde ColdFusion modèle qui invoque une fonction de ce composant, allez placer une enchère sur eBay, exécuter une ColdFusion troisième modèle qui appelle une autre fonction de cet élément, et ainsi de suite jusqu'à ce que vous faites une pause plus longue que votre permis de session timeout et l'instance est détruite. C'est pourquoi nous nous référons à la compagnie comme une longue durée de vie composante persistante. Composants peuvent également être persisté dans le champ d'application aussi. N'oubliez pas que tous les utilisateurs de votre application utilise la même instance de votre composant, de verrou, ainsi devient encore plus critique et les goulets d'étranglement des performances potentiellement devenir davantage un problème si votre composant manipule les propriétés de son de cette portée. Gageons que, maintenant, tu penses, je suis clustering ma demande, ce qui signifie que je n'utilise pas de variables de session nulle part, donc je vais persister mon instance de composant par la sérialisation avec WDDX et le stocker dans le champ d'application du client. "C'est une manière intelligente idée, mais malheureusement, il ne fonctionne pas. Si vous sérialiser une instance de composant, les propriétés dans le champ d'application de cette sérialiser très bien, mais vous perdez tous vos fonctions, etc désérialisation, vous ne verrez le dos sont les propriétés.

un article présenté par Peter Andrews


Disclaimer:Notre site n'est pas responsable du contenu de cet article. Webarticles est une ressource d'information gratuite.
Important: Cet article «Appel d'un élément de fonction" a été traduit par un logiciel automatique. Nous nous sentons désolés pour les fautes d'orthographe que mai ont eu lieu. Nous vous remercions de votre compréhension.


Online: 264 users browsing the articles directory