Как получить доступ к библиотеке UDF в области ПРИЛОЖЕНИЕ, используя сокращенное имя? - PullRequest
1 голос
/ 01 февраля 2012

Я использую ColdFusion 8.0.1.

Я создал библиотеку UDF и поместил ее в CFC. Я загружаю библиотеку в области ПРИЛОЖЕНИЯ следующим образом:

// CREATE STRUCTURE OBJECTS
if (not isDefined("APPLICATION.AppOBJ") or not isStruct(APPLICATION.AppOBJ)) {
    APPLICATION.AppOBJ = structNew();
    APPLICATION.AppOBJ.udf_library = createObject("component", "udf.udf_library");
} 

Библиотека прекрасно работает! Но я хочу уменьшить код, необходимый для доступа к функциям, чтобы сократить ссылку. В настоящее время я должен получить доступ к таким функциям:

APPLICATION.AppOBJ.udf_library.myFunction();

Я хочу иметь возможность ссылаться на этот объект библиотеки как "UDF", например так:

UDF.myFunction();

В другом проекте ColdFusion 9 (опять же, это проект CF8!), Я могу сделать это сразу после создания объекта

<cfset udf = APPLICATION.AppOBJ.udf_library>

В текущем проекте это не работает в файле application.cfm. Однако он работает, когда я помещаю его на страницу, на которой он используется.

Мой вопрос заключается в том, как далеко вверх по течению я могу поместить эту последнюю строку кода, чтобы переменная была доступна на любой странице приложения? Есть ли разница между CF8 и CF9 для такого типа вещей? Разница в том, что я работаю в application.CFM против application.CFC?

Спасибо !!!

- РЕДАКТИРОВАТЬ - ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ ---

Файлы, к которым я пытаюсь получить доступ к объекту APPLICATION.AppOBJ.udf_library, находятся в пользовательском теге. Может ли это иметь значение?

- ОТВЕТ - СПАСИБО МИХЕ И БЕН НАДЕЛУ ---

1 Ответ

2 голосов
/ 01 февраля 2012

Я еще не пробовал, но думаю, что это должно работать, поскольку идея взята из записи Бена Наделя , озаглавленной Создание глобально доступных пользовательских функций в ColdFusion (более безопасная версия)

<cfcomponent output="false" hint="I define the application settings and event handlers.">

    <!--- Define the application. --->
    <cfset this.name = "TestApp" >
    <cfset this.applicationTimeout = createTimeSpan( 0, 0, 5, 0 ) >


    <!---
        Add all of our "global" methods to the URL scope. Since
        ColdFusion will automatically seach the URL scope for
        non-scoped variables, it will find our non-scoped method
        names.
    --->
    <cfset structAppend( url, createObject( "component", "udf.udf_library" ) ) >

</cfcomponent>

Теперь вы сможете получить глобальный доступ к MyFunction().

Если вы хотите получить доступ к функции как UDF.MyFunction(), тогда я думаю, что вы сможете изменить пример Бена дляследующее:

<cfset UDF = StructNew() >
<cfset structAppend( UDF, createObject( "component", "udf.udf_library" ) ) >
<cfset structAppend( url, UDF ) >
...