【问题标题】:How to add path with dots in CreateObject Argument如何在 CreateObject 参数中添加带点的路径
【发布时间】:2019-01-13 16:50:09
【问题描述】:

我正在尝试从我的组件导入路径,但一个文件夹有多个点,例如board.event.calendar。由于这是此代码库中的常规结构,因此我无法更改文件夹名称。我尝试了多种方法来实现 CreatObject 参数中的正确路径,例如:

<cfset Event = CreateObject("Component", "path.to.'board.event.calendar'.Event") />
<cfset Event = CreateObject("Component", "path/to/'board.event.calendar'/Event") />
<cfset Event = CreateObject("Component", "path\to\'board.event.calendar'\Event") />
<cfset Event = CreateObject("Component", "path.to.board#chr(046)#event#chr(046)#calendar.Event") />

但到目前为止还没有运气。我该如何处理?

【问题讨论】:

    标签: coldfusion coldfusion-11


    【解决方案1】:

    CreateObject() 使用句点字符作为路径中的分隔符,并且不接受单引号等无效字符(如上例所示)。

    一种方法是创建一个映射,然后在您的路径中使用它。例如,如果您的应用程序的路径是 C:\dev\myapp\,而日历 CFC 的路径是在 C:\dev\myapp\calendar\,那么您可以在 application.cfc 文件中创建一个映射,如下所示:

    this.mappings = {
        "/app": "C:/dev/myapp/",
        "/calendar: "C:/dev/myapp/calendar/"
    }
    

    (您也可以在 CF Administrator 中创建映射)

    然后在创建组件时,您可以使用:

    myComponent = createObject("app.calendar.event").init();
    

    myComponent = createObject("calendar.event").init();
    

    【讨论】:

    • 该死,太慢了 ;-) 假设是最新版本,您也可以使用较新的语法而不是 createObject(),例如。 myComponent = new Calendar.Event().
    • 虽然在 MX 时代 createObject() 确实存在严重的性能问题,但 createObject() 已不再是 AFAIK 的性能问题。就使用new 语法创建对象而言,这并不总是有效。第一个问题是 CF 需要知道 Calendar 对象是什么,这仍然是通过映射确定的。第二个问题可能是也可能不是问题,new 语法将自动调用 init() 方法(如果已定义),并且如果您的代码需要将任何特定的东西传递给 init() 方法,您将无法做到这一点。
    • 您是说某些映射可以 与 createObject 一起使用,但不适用于 new?你能举个例子吗?还没有遇到那个,但是映射是一种奇怪的野兽,所以不会感到惊讶......现在确定你对 init() 的意思。如果你需要传入一些值,为什么new Calendar.Event(stuff1=111, stuff2=222) 不起作用?
    • 好吧,我相信你是对的……我没用过那种语法。我的猜测是这两种语法都将评估为相同的 Java 代码。我有点喜欢你的方式......我可能不得不开始这样做。
    • 我自己最近才开始使用它。到目前为止我喜欢它。只是想确保我没有忽略某些东西:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 2012-03-26
    • 2012-05-10
    • 1970-01-01
    • 2023-01-09
    • 2016-09-08
    相关资源
    最近更新 更多