Function Coldfusion this.mappings在cfc->函数中不起作用

Function Coldfusion this.mappings在cfc->函数中不起作用,function,coldfusion,cfc,mappings,Function,Coldfusion,Cfc,Mappings,如何使我在application.cfc中定义的映射在其他cfc中的其他函数中工作 i、 这个.mappings[plugins]在任何页面上都可以正常工作,但是如果我尝试实例化一个包含调用这个.mappings[plugins]的函数的cfc,它就会失败 谢谢 编辑: 我不确定-以下是我试图做的: 在application.cfc中: this.mappings["Plugins"] = \ getDirectoryFromPath(getCurrentTemplatePath())&

如何使我在application.cfc中定义的映射在其他cfc中的其他函数中工作

i、 这个.mappings[plugins]在任何页面上都可以正常工作,但是如果我尝试实例化一个包含调用这个.mappings[plugins]的函数的cfc,它就会失败

谢谢

编辑:
我不确定-以下是我试图做的: 在application.cfc中:

this.mappings["Plugins"] = \
getDirectoryFromPath(getCurrentTemplatePath())&'Assets/Plugins';
和库存。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>

在一个CFC中,Application.CFC是其中之一,该范围仅适用于该特定CFC。因此,当您在CFM页面中时,它属于Application.cfc的管辖范围,那么这个范围是Application.cfc,但是当您在cfc中时,它是针对特定的cfc

也就是说,为什么需要直接访问映射结构?如果要使用该映射加载对象或包含文件,只需执行或

您需要直接访问结构的用例是什么?你想修改它吗


*编辑以修复CFC内的代码,其中Application.CFC是其中之一,此范围仅适用于该特定CFC。因此,当您在CFM页面中时,它属于Application.cfc的管辖范围,那么这个范围是Application.cfc,但是当您在cfc中时,它是针对特定的cfc

也就是说,为什么需要直接访问映射结构?如果要使用该映射加载对象或包含文件,只需执行或

您需要直接访问结构的用例是什么?你想修改它吗


*编辑以修复代码

我认为您调用的映射错误。使用application.cfc中的定义:

this.mappings["plugins"]
然后将在其他代码中被插件引用,因此:

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

HTH,如果没有在调用页面上发布代码。

我认为您调用的映射错误。使用application.cfc中的定义:

this.mappings["plugins"]
然后将在其他代码中被插件引用,因此:

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

HTH,如果没有在调用页上发布代码。

除非CF9中发生了变化,否则您在代码中的第一个错误是在每个映射名称的开头定义了没有斜杠/的映射键

您将映射定义为

this.mappings["plugins"] =
应该是这样

this.mappings["/plugins"] =
请注意结构键名称中的斜杠/符号。必须以这种方式命名每个映射

然后您可以参考Sam Farmer在其评论中提到的映射

然后将在其他代码中被插件引用,因此:

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

除非在CF9中有所改变,否则代码中的第一个错误是在每个映射名称的开头没有斜杠/来定义映射键

您将映射定义为

this.mappings["plugins"] =
应该是这样

this.mappings["/plugins"] =
请注意结构键名称中的斜杠/符号。必须以这种方式命名每个映射

然后您可以参考Sam Farmer在其评论中提到的映射

然后将在其他代码中被插件引用,因此:

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

我不确定-以下是我试图做的:在application.cfc:this.mappings[Plugins]=getDirectoryFromPathgetCurrentTemplatePath&“资产/插件”;cfc:j=1;variables.indeciesArray=ArrayNew1;variables.indeciesFile=application.mappings[Plugins]&'/StockMarketData/Data/indicies.csv';我更新了原来的问题-抱歉,只是了解了post-syntax的窍门,它并不是映射的预期用途。如果只想指定稍后使用的文件路径,可以设置应用程序范围变量。因此,您可以使用application.pluginsPath=getDirectoryFromPathgetCurrentTemplatePath而不是使用this.mappings。。。然后在你的CFC中你可以引用CFC。但是,请注意,从函数中访问应用程序范围被认为是不好的OO。它破坏了封装。相反,您应该将该路径作为参数传入,并将其称为showIndicateSpluginsPath=application.pluginsPath.Aha,因为映射不会使其进入应用程序范围。当您使用它们时,ColdFusion将通过检查引用中的第一个单词是否是cfc的映射,或者路径是否以/cfm开头来实现。因此,您的代码应该是:variables.indeciesFile='/plugins/StockMarketData/Data/indicies。csv@Sean科因:这取决于我的想法:如果肖恩打算使用cfinclude来获取csv,那么他的解决方案就可以了。我不确定-以下是我试图做的:在应用程序中。cfc:this.mappings[插件]=getDirectoryFromPathgetCurrentTemplatePath&“资产/插件”;cfc:j=1;variables.indeciesArray=ArrayNew1;variables.indeciesFile=application.mappings[Plugins]&'/StockMarketData/Data/indicies.csv';我更新了原来的问题-抱歉,只是了解了post-syntax的窍门,它并不是映射的预期用途。如果只想指定稍后使用的文件路径,可以设置应用程序范围变量。因此,您可以使用application.pluginsPath=getDirectoryFromPathg,而不是使用this.mappings
etCurrentTemplatePath。。。然后在你的CFC中你可以引用CFC。但是,请注意,从函数中访问应用程序范围被认为是不好的OO。它破坏了封装。相反,您应该将该路径作为参数传入,并将其称为showIndicateSpluginsPath=application.pluginsPath.Aha,因为映射不会使其进入应用程序范围。当您使用它们时,ColdFusion将通过检查引用中的第一个单词是否是cfc的映射,或者路径是否以/cfm开头来实现。因此,您的代码应该是:variables.indeciesFile='/plugins/StockMarketData/Data/indicies。csv@Sean科因:这取决于我认为:如果肖恩打算使用cfinclude来获取csv,那么他的解决方案就可以了。我认为我们需要了解您的其他功能。一旦有了CSV路径,您将如何处理它?阅读、处理和返回?您可以使用下面的as Sam notes cfinclude包含CSV,然后进行处理,但我认为使用cffile读取文件将是一种更好的方式。我认为我们需要了解您的其余功能。一旦有了CSV路径,您将如何处理它?阅读、处理和返回?您可以使用cfinclude下面的as Sam注释包含CSV,然后进行处理,但我认为使用cffile读取文件将是一种更好的方式。