在使用CF application.cfc时-需要创建一些var开头(在THIS范围内)-例如this.name和this.applicationtimeout()等。

我遇到了我认为是奇怪行为的某件事-希望有人可以解释为什么会发生这种情况以及可能的解决方法。

接受了很多“ THIS”变量,这些变量可以用来设置应用程序特定的变量(当然,您必须在CFADMIN中检查“允许应用程序特定的变量”-我已经这样做了)

其中之一是THIS.mappings-这是一个映射数组-MINE看起来像这样:

this.path = GetDirectoryFromPath( GetCurrentTemplatePath() );
this.mappings = {
     '/files' = '#this.path#_my_files\'
     ,'/functions' = '#this.path#_my_functions\'
     ,'/logs' = '#this.path#_my_logs\'
};


它工作正常-在应用程序顶部的cfscript块中设置它时
它工作正常-如果我将该脚本块放入其自己的文件中,并在application.cfc中cfinclude

但是-为了分段代码-我想将我所有的应用程序设置都放在settings.cfc中...(当时的想法是如果必须更改某些设置-我不必担心“在哪里看起来,我真的不想在我的app.cfc以及settings.cfc中的其他应用程序或会话设置上拆分此内容

所以我在settings.cfc中创建了一个名为getTHIS的方法,然后将脚本块放在了其中...然后使用

<cfinvoke component="settings"
          method="getTHIS"
      returnvariable="THIS"
    />


哪个工作-映射上的(似乎)除外...

this.name等,似乎都可以正常工作并得到设置-事实上,如果我这样做,this.mappings也可以设置得很好(因此出现)

<cfdump var="#THIS#" label="THIS" />


当我在app.cfc页上将它“按字面意义”设置时,转储与THIS的转储相同。

但是,任何通过映射调用模板的尝试都会导致标准的“如果要使用绝对路径,则必须创建映射等等……”

我更大的目标是(在应用程序启动时)扫描目录中的子目录,并基于某些子目录创建映射..但是,如果我无法将该功能抽象为它自己的功能,我将被迫直接在app.cfc中编写它(这不会杀死我,但再次,我试图在逻辑上对代码进行分段...似乎在何时何地可以设置这些映射方面存在限制...是吗?

所以我想最大的问题是-我可以通过外部方法设置this.mappings吗?
我想我可以使用cfc调用恢复“我想要的设置”,然后只需执行“设置this.whatever = return form cfc”(这可能是我的答案...)

谢谢

最佳答案

映射只能在“伪构造函数”中设置,而不能在Application.cfc-http://adobe.ly/QN2oX1内部的任何方法中设置

您可以尝试将this.mappings设置为CFC调用的结果(我不认为为什么这不起作用),但是如果它依赖于映射,则可能无法工作。

关于coldfusion - ColdFusion Application.cfc和cfinvoke以及此范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11904786/

10-12 18:02