Как мне вызвать вторую функцию в том же CFC в области ПРИЛОЖЕНИЯ? - PullRequest
1 голос
/ 29 ноября 2011

Я использую 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, вроде как (подделка для простоты):

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

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

Я получаю эту ошибку:

Entity has incorrect type for being called as a function. The symbol you provided getRandomNumber is not the name of a function.

Я подумал, что, возможно, я не могу ссылаться на функцию в том же CFC, не создав сначала объект, поэтому я делаю это:

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

Тогда я получу эту ошибку:

Either there are no methods with the specified method name and argument types, or the method getRandomNumber is overloaded with arguments types that ColdFusion can't decipher reliably. If this is a Java object and you verified that the method exists, you may need to use the javacast function to reduce ambiguity.

Как мне вызвать вторую функцию в том же CFC?

1 Ответ

6 голосов
/ 29 ноября 2011

Первое, что я бы попробовал, это var scoping всех ваших переменных в ваших функциях:

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

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

Если это не решит проблему, дайте мне знать, и мы сможем продолжить.

редактировать Хорошо, теперь, когда проблема с локальной областью решена, попробуйте это:

<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>
...