2011-01-14 13 views
1

Wie bekomme ich die Mappings, die ich in application.cfc definiert habe, um in anderen Funktionen in anderen cfcs zu arbeiten?Coldfusion this.mappings funktioniert nicht in einer cfc -> Funktion

d. Dass this.mappings ["plugins"] funktioniert gut auf jeder Seite, aber wenn ich versuche, eine cfc mit einer Funktion zu instanziieren, die this.mappings ["plugins"] - es schlägt fehl.

dank

EDIT: Ich bin nicht sicher - hier ist das, was ich zu tun versucht: In Application.cfc:

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

und 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> 
+0

Ich denke, wir Sie müssen den Rest Ihrer Funktion sehen. Was machen Sie mit dem Pfad zur CSV, wenn Sie sie einmal haben? Lesen, verarbeiten und zurückgeben?Sie könnten (wie Sam unten erwähnt) cfinclude verwenden, um die CSV-Datei einzuschließen, und dann Ihre Verarbeitung durchführen, aber ich würde denken, dass die Verwendung von cffile zum Lesen der Datei ein besserer Weg wäre. –

Antwort

3

denke ich, Sie die Zuordnung falsch anrufen. Mit Ihrer Definition in Application.cfc:

this.mappings["plugins"] 

würde dann durch "Plug-in" so in anderem Code verwiesen werden:

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

HTH, wenn nicht den Code auf der rufenden Seite veröffentlichen.

+0

Ich bin nicht sicher - ist hier, was ich versuche zu tun: in Application.cfc: this.mappings [ "Plugins"] = getDirectoryFromPath (getCurrentTemplatePath()) & 'Assets/Plugins'; und in stock.cfc: j = 1; Variablen.indeciesArray = ArrayNew (1); variables.indeciesFile = Anwendung.mappings ["Plugins"] & '/ StockMarketData/Data/indecies.csv';

+0

Ich habe die ursprüngliche Frage aktualisiert - sorry, nur den Dreh raus der Post-Syntax –

+0

Das ist nicht wirklich die beabsichtigte Verwendung für Zuordnungen. Wenn Sie nur einen Dateipfad angeben möchten, der später verwendet werden soll, können Sie eine Anwendungsbereichsvariable festlegen. Anstatt also this.mappings zu verwenden, könnten Sie application.pluginsPath = getDirectoryFromPath (getCurrentTemplatePath()) ausführen ... dann könnten Sie in Ihrem CFC auf den CFC verweisen. Beachten Sie jedoch, dass der Zugriff auf den Anwendungsbereich innerhalb einer Funktion als schlechtes OO angesehen wird. Es bricht die Kapselung. Sie sollten diesen Pfad stattdessen als Argument übergeben und als showIndices (pluginsPath = application.pluginsPath) aufrufen. –

1

In einem CFC, von dem Application.cfc eins ist, bezieht sich der Bereich "this" nur auf diesen bestimmten CFC. Wenn Sie sich also auf einer CFM-Seite befinden, die unter die Zuständigkeit der Application.cfc fällt, gilt der Bereich "this" für Application.cfc, aber in CFC für den jeweiligen CFC.

Das heißt, warum müssten Sie direkt auf die Mappings-Struktur zugreifen? Wenn Sie diese Zuordnung verwenden möchten, um ein Objekt zu laden oder eine Datei einzuschließen, können Sie einfach <cfinclude template="/plugins/path/to/myfile" /> oder <cfset obj = createobject("component","plugins.path.to.my.cfc") />.

Was ist Ihr Anwendungsfall für den direkten Zugriff auf die Struktur? Versuchen Sie, es zu ändern?

* bearbeitet Code zu beheben

1

Sofern sich in CF9 nichts geändert hat, der erste Fehler im Code, der die Zuordnungsschlüssel ohne Schrägstrich "/" am Anfang jedes Zuordnungsnamens definiert.

Sie definieren die Zuordnungen als

this.mappings["plugins"] = 

Es statt

this.mappings["/plugins"] = 

Beachten Sie den Schrägstrich "/" in der Struktur Schlüsselnamen sein sollte. Sie müssen jedes Mapping auf diese Weise benennen.

Dann würden Sie auf die Abbildungen als Sam Farmer in seinem Kommentar erwähnt siehe“

würde dann durch in anderen Code referenziert werden "Plugins" so:

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