Coldfusion 如何在应用程序范围内调用同一CFC中的第二个函数?

Coldfusion 如何在应用程序范围内调用同一CFC中的第二个函数?,coldfusion,coldfusion-9,cfc,Coldfusion,Coldfusion 9,Cfc,我正在使用ColdFusion 9.0.1 让我首先说明,我可能问的问题不对。由于每个函数都独立工作,并且只有在一个函数调用另一个函数时才会失败,因此我认为问题在于如何调用该函数 我正在创建一个包含结构的应用程序变量。该结构包含对对象orders.cfc的引用 if (not isDefined("APPLICATION.AppInfo") or not isStruct(APPLICATION.AppInfo)) { APPLICATION.AppInfo = structNew();

我正在使用ColdFusion 9.0.1

让我首先说明,我可能问的问题不对。由于每个函数都独立工作,并且只有在一个函数调用另一个函数时才会失败,因此我认为问题在于如何调用该函数

我正在创建一个包含结构的应用程序变量。该结构包含对对象orders.cfc的引用

if (not isDefined("APPLICATION.AppInfo") or not isStruct(APPLICATION.AppInfo)) {
    APPLICATION.AppInfo = structNew();
    APPLICATION.AppInfo.objOrders = createObject("component", "globaladmin.orders");
}
我能够成功访问orders.cfc中的方法,如下所示:

OrderItemList = APPLICATION.AppInfo.objOrders.orderItemList(URL.Customer);
我在orders.cfc中有一些方法调用order.cfc中的其他方法,有点像这样(为了简单起见而伪造):

我想如果不先创建对象,可能无法引用同一CFC中的函数,所以我这样做:

<cffunction name="orderItemList">
    <cfscript>
          LOCAL.RandomNumber = APPLICATION.AppInfo.objOrders.getRandomNumber();
          return LOCAL.RandomNumber;
    </cfscript>
</cffunction>

我应该如何调用同一CFC中的第二个函数?

我要尝试的第一件事是var在函数中定义所有变量的范围:

<cffunction name="orderItemList">
    <cfscript>
          var RandomNumber = getRandomNumber();
          return RandomNumber;
    </cfscript>
</cffunction>

<cffunction name="getRandomNumber">
    <cfscript>
        var SomeNumber= randRange(0,10);
        return SomeNumber;
    </cfscript>
</cffunction>

var RandomNumber=getRandomNumber();
返回随机数;
var SomeNumber=randRange(0,10);
返回一些数字;
如果这不能解决问题,请告诉我,我们可以进一步探讨

编辑 好的,现在本地作用域问题已经解决,请尝试以下操作:

<cffunction name="orderItemList">
    <cfscript>
          LOCAL.RandomNumber = THIS.getRandomNumber();
          return LOCAL.RandomNumber;
    </cfscript>
</cffunction>

<cffunction name="getRandomNumber">
    <cfscript>
        LOCAL.SomeNumber= randRange(0,10);
        return LOCAL.SomeNumber;
    </cfscript>
</cffunction>

LOCAL.RandomNumber=THIS.getRandomNumber();
返回LOCAL.RandomNumber;
局部。SomeNumber=randRange(0,10);
返回LOCAL.SomeNumber;

我要尝试的第一件事是var在函数中定义所有变量的范围:

<cffunction name="orderItemList">
    <cfscript>
          var RandomNumber = getRandomNumber();
          return RandomNumber;
    </cfscript>
</cffunction>

<cffunction name="getRandomNumber">
    <cfscript>
        var SomeNumber= randRange(0,10);
        return SomeNumber;
    </cfscript>
</cffunction>

var RandomNumber=getRandomNumber();
返回随机数;
var SomeNumber=randRange(0,10);
返回一些数字;
如果这不能解决问题,请告诉我,我们可以进一步探讨

编辑 好的,现在本地作用域问题已经解决,请尝试以下操作:

<cffunction name="orderItemList">
    <cfscript>
          LOCAL.RandomNumber = THIS.getRandomNumber();
          return LOCAL.RandomNumber;
    </cfscript>
</cffunction>

<cffunction name="getRandomNumber">
    <cfscript>
        LOCAL.SomeNumber= randRange(0,10);
        return LOCAL.SomeNumber;
    </cfscript>
</cffunction>

LOCAL.RandomNumber=THIS.getRandomNumber();
返回LOCAL.RandomNumber;
局部。SomeNumber=randRange(0,10);
返回LOCAL.SomeNumber;

您的简化示例是否在您的环境中排除了错误?我之所以这么问,是因为如果我复制并超越了您的示例,并在本地运行它们,我不会遇到任何错误。只是想知道是否有一些隐藏的细节可能是导致错误的原因。您确定存储在应用程序范围中的CFc实例实际上有第二个方法吗?我对存储在共享作用域中的对象进行了更改,但在更改后不刷新该对象,这让我感到痛心。您的简化示例是否排除了您环境中的错误?我之所以这么问,是因为如果我复制并超越了您的示例,并在本地运行它们,我不会遇到任何错误。只是想知道是否有一些隐藏的细节可能是导致错误的原因。您确定存储在应用程序范围中的CFc实例实际上有第二个方法吗?我一直被这样的情况所困扰:我对存储在共享作用域中的对象进行了更改,但在更改后不刷新该对象。请注意更新和函数调用的“THIS.”前缀。Jake,这就是答案。我慢慢地将所有(相关的)东西移到这个范围,慢慢地错误消失了。谢谢你这么棒!一定是发生了其他事情,您不需要使用它来调用同一CFC中的函数。@ScottStroz-您是对的,不需要这样做。我提出这个建议是因为我仍然怀疑范围冲突有问题;现在,不是使用局部变量,而是使用名为getRandomNumber的全局变量。在引用中添加“this”作用域可以解决这个问题。请注意更新和函数调用的“this.”前缀。Jake,这就是答案。我慢慢地将所有(相关的)东西移到这个范围,慢慢地错误消失了。谢谢你这么棒!一定是发生了其他事情,您不需要使用它来调用同一CFC中的函数。@ScottStroz-您是对的,不需要这样做。我提出这个建议是因为我仍然怀疑范围冲突有问题;现在,不是使用局部变量,而是使用名为getRandomNumber的全局变量。在该引用中添加“this”范围可以解决该问题。
<cffunction name="orderItemList">
    <cfscript>
          LOCAL.RandomNumber = THIS.getRandomNumber();
          return LOCAL.RandomNumber;
    </cfscript>
</cffunction>

<cffunction name="getRandomNumber">
    <cfscript>
        LOCAL.SomeNumber= randRange(0,10);
        return LOCAL.SomeNumber;
    </cfscript>
</cffunction>