9
votes

Puis-je appeler une étiquette personnalisée dans cfscript?

Par exemple, si j'ai une étiquette personnalisée comme mon hypothèse serait quelque chose comme appswitch (action = "chèque") , Mais je ne suis pas certain que CF peut résoudre cela comme une étiquette personnalisée.

L'autre solution que je peux penser serait d'écrire une fonction d'emballage et d'appeler mon étiquette personnalisée, mais qui se sent redondant.

On dirait que je suis trop difficile à simplifier un problème beaucoup plus complexe, alors Toute perspicacité serait appréciée (même pourquoi cela n'est pas / ne doit pas être pris en charge).


0 commentaires

3 Réponses :


7
votes

En supposant que vous utilisiez Adobe CF, malheureusement, la réponse est non. Vous devez écrire une fonction wrapper qui est basée sur la CFML. Par exemple:

<cfscript>
    module name="myCustomTag";
</cfscript>


3 commentaires

Merci Jake, exactement ce que je cherchais.


Certains diraient que les balises sont bonnes pour les actions et les composants basés sur l'interface utilisateur conviennent mieux aux modèles / services. Par conséquent, il est rare que l'on aurait besoin de faire une telle chose.


Point valide @Todd Sharp, je réécrit une application avec FW / 1 et je dois faire face à un tas de balises personnalisées préexistantes utilisées par plusieurs autres applications ... Vous avez raison, si vous avez le bon moment. Je les écrirais comme composants.



11
votes

Mise à jour 2: strong>

Voici un âne paissin (ou est-ce mauvais asser?). AVERTISSEMENT: caractéristiques non documentées ci-dessous (mais toujours cool): p>

suppose que la balise personnalisée renvoie une valeur comme: p> xxx pré>

donc l'attribut résultat de la balise S'attend à ce qu'un nom de variable soit défini dans l'appelant. En utilisant maintenant la méthode ci-dessous, nous pouvons accéder à ce résultat via CFScript. P> xxx pré>

update: strong> p>

La solution ci-dessous peut causer un effet secondaire indésirable. Si votre balise personnalisée renvoie une valeur, vous ne l'aurez pas accès car la balise est appelée à partir du composant, la variable de retour est placée dans la portée des variables du composant, et non du modèle d'appel. Bien sûr, si vous retournez une valeur, vous devez probablement utiliser un CFC de toute façon (comme je l'ai commenté ci-dessus), utilisez-le à vos risques et périls. P>

Que diriez-vous de cette approche (modifiée de Jake's): P>

CustomTagProxy.cfc: p>

<cfscript>
proxy = new CustomTagProxy();
echoTest = proxy.echo(name="Todd");
timeTest = proxy.time();

writeOutput(echoTest);
writeOutput("<br />");
writeOutput(timeTest); 
</cfscript>


2 commentaires

coldfusion.tagxt.lang.moduletag ftw


Voici une tonne d'autres balises que vous pouvez faire dans cfscript en utilisant cette méthode



0
votes

mise à jour pour 2021: strong>

Les versions récentes de ColdFusion qui ont un support CFScript amélioré vous permettront d'appeler une étiquette personnalisée similaire à une fonction. P>

<cfscript>    
    cf_custtag(att1="value1", att2="value2");
</cfscript>


0 commentaires