首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ColdFusion Application.cfc & cfinvoke &此作用域

ColdFusion Application.cfc & cfinvoke &此作用域
EN

Stack Overflow用户
提问于 2012-08-10 23:27:40
回答 2查看 789关注 0票数 3

在使用CF application.cfc时-首先需要创建一些var(在这个作用域中)-比如this.name和this.applicationtimeout()等。

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

有相当多的"THIS“vars可以用来设置特定于应用程序的变量(当然,你必须在CFADMIN中选中”允许特定于应用程序的变量“--我就是这么做的)

其中之一是THIS.mappings -它是一个映射数组-我的是这样的:

代码语言:javascript
复制
this.path = GetDirectoryFromPath( GetCurrentTemplatePath() );
this.mappings = {
     '/files' = '#this.path#_my_files\'
     ,'/functions' = '#this.path#_my_functions\'
     ,'/logs' = '#this.path#_my_logs\'
};

如果我将该脚本块放在它自己的文件中,并将其包含在application.cfc中,它就能正常工作--当它设置在application.cfc顶部的cfscript块中时,它工作得很好

然而--为了分割我的代码--我想把我所有的应用程序设置放在一个settings.cfc中……(这里的想法是,如果必须更改某些设置-我不必担心去哪里查看,我真的不想在我的app.cfc和settings.cfc中的其他应用程序或会话设置上拆分这些东西

因此,我在settings.cfc中创建了一个名为getTHIS的方法,并将脚本块放在那里……然后使用

代码语言:javascript
复制
<cfinvoke component="settings"
          method="getTHIS" 
      returnvariable="THIS" 
    />

这是有效的-除了(看起来)在映射上...

this.name等似乎都正常工作并得到了设置--事实上,如果我执行一个

代码语言:javascript
复制
<cfdump var="#THIS#" label="THIS" />

当我在app.cfc页面上‘逐字’设置它时,转储与它的转储完全相同。

然而,任何通过映射调用模板的尝试都会导致标准的“如果你想使用绝对路径,你必须创建一个映射之类的……”

我更大的目标是(在应用程序启动时)扫描目录中的子目录,并基于某些子目录创建映射。但如果我不能将该功能抽象为它自己的函数-我将被迫直接在app.cfc中编写它(这不会杀死我,但我再次尝试从逻辑上分割我的代码……在何时何地设置这些映射似乎是有限制的……是真的吗?

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

谢谢

EN

回答 2

Stack Overflow用户

发布于 2012-08-11 00:32:03

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

您可以尝试将this.mappings设置为CFC调用的结果(我想不出这为什么行不通),但如果它依赖于映射来执行此操作,那么它很可能行不通。

票数 0
EN

Stack Overflow用户

发布于 2012-08-11 00:43:04

我还没有测试过这一点,但我非常确定如果你的application.cfc扩展了你的settings.cfc,它将会工作。

代码语言:javascript
复制
component {
    public any function getMappings() {
        var mappings = {};
        //code to get your directories etc.
        return mappings;
    }
}

component extends="settings" {
    this.name = "xxxx";
    this.mappings = getMappings();
    ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11904786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档