Question

Comment puis-je obtenir les correspondances que j'ai définis dans application.cfc au travail dans d'autres fonctions dans d'autres cfc?

i.e.. this.mappings [ « plugins »] fonctionne très bien sur une page mais si je tente de instancier un cfc contenant une fonction qui appelle this.mappings [ « plugins »] - elle échoue.

Merci

EDIT: Je ne sais pas - voici ce que je suis en train de le faire: En application.cfc:

this.mappings["Plugins"] = \
getDirectoryFromPath(getCurrentTemplatePath())&'Assets/Plugins';

et stock.cfc:

<cfcomponent output="yes" > 
<cffunction name="showIndecies" access="public" output="yes" returntype="string">
<cfscript>
j = 1; 
variables.indeciesArray = ArrayNew(1); 
variables.indeciesFile = \
application.mappings["Plugins"]&'/StockMarketData/Data/indecies.csv'; 
</cfscript>
Était-ce utile?

La solution

Je pense que vous appelez le mauvais mapping. Utilisation de votre définition application.cfc:

this.mappings["plugins"]

serait alors référencé dans tout autre code par "plugins" si:

var aName = new plugins.theCFC()
var aName = createObject("component","plugins.theCFC").init()
<cfinclude template="/plugins/aFile.cfm">

HTH, sinon poster votre code sur la page d'appel.

Autres conseils

Dans un CFC, dont Application.cfc est l'une, la portée « ce » que de se rapporte à cette CFC spécifique. Ainsi, lorsque vous êtes dans une page CFM, qui relève de la compétence de la Application.cfc, le « ce » champ d'application est pour le Application.cfc, mais quand dans un CFC, son CFC pour ce particulier.

Cela dit, pourquoi auriez-vous besoin d'accéder aux applications directement struct? Si vous souhaitez utiliser cette application pour charger un objet ou d'inclure un fichier, vous pouvez juste faire <cfinclude template="/plugins/path/to/myfile" /> ou <cfset obj = createobject("component","plugins.path.to.my.cfc") />.

Quelle est votre cas d'utilisation pour avoir besoin d'accéder au struct directement? Essayez-vous de le modifier?

* modifié au code fix

À moins que les choses ont changé dans CF9, votre première erreur dans le code qui définit les clés de mappage sans une barre oblique « / » au début de chaque nom de mappage.

Vous définissez les correspondances comme

this.mappings["plugins"] =

Il devrait plutôt être

this.mappings["/plugins"] =

Notez la barre oblique « / » au nom de la clé de la structure. Vous devez nommer chaque mappage de cette façon.

alors vous référer aux applications comme Sam Fermier mentionné dans son commentaire "

  

serait alors référencé dans tout autre code par "plugins" si:

var aName = new plugins.theCFC()
var aName = createObject("component","plugins.theCFC").init()
<cfinclude template="/plugins/aFile.cfm">
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top