Domanda

Come faccio a ottenere i mapping ho definito in Application.cfc al lavoro in altre funzioni in altri CFC?

vale a dire. this.mappings [ "plugins"] funziona bene su ogni pagina, ma se provo a un'istanza di un CFC che contiene una funzione che chiama this.mappings [ "plugins"] - viene a mancare.

grazie

EDIT: Io non sono sicuro - ecco quello che sto cercando di fare: In Application.cfc:

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

e in 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>
È stato utile?

Soluzione

Penso che si sta chiamando il torto di mappatura. Usando la tua definizione in Application.cfc:

this.mappings["plugins"]

sarebbe poi fatto riferimento in altro codice da "plugins" in questo modo:

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

HTH, se non pubblicare il tuo codice nella pagina chiamante.

Altri suggerimenti

All'interno una CFC, di cui Application.cfc è uno, il "questo" scope solo riguarda quello specifico CFC. Così, quando ci si trova in una pagina CFM, che cade sotto la giurisdizione della Application.cfc, poi il "questo" campo di applicazione è per l'Application.cfc, ma quando in un CFC, la sua per quel particolare CFC.

Detto questo, perchè è necessario accedere le mappature struct direttamente? Se si desidera utilizzare che la mappatura per caricare un oggetto o di includere un file, si può solo fare <cfinclude template="/plugins/path/to/myfile" /> o <cfset obj = createobject("component","plugins.path.to.my.cfc") />.

Qual è il tuo caso d'uso per la necessità di accedere direttamente alla struct? Stai cercando di modificarlo?

* a cura di codice fisso

A meno che le cose sono cambiate in CF9, il tuo primo errore nel codice che sta definendo le chiavi di mappatura, senza uno slash "/" all'inizio di ogni nome di mappatura.

Si stanno definendo le mappature come

this.mappings["plugins"] =

Dovrebbe essere invece

this.mappings["/plugins"] =

Si noti la barra "/" nel nome della chiave della struttura. È necessario denominare ogni mapping in quel modo.

Poi devi fare riferimento alle mappature come Sam Farmer citato nel suo commento "

sarebbe poi fatto riferimento in altro codice da "plugins" in questo modo:

var aName = new plugins.theCFC()
var aName = createObject("component","plugins.theCFC").init()
<cfinclude template="/plugins/aFile.cfm">
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top