Coldfusion this.mappings не работает в функции cfc ->

Как мне получить сопоставления, которые я определил в application.cfc, для работы в других функциях других cfcs?

т.е. this.mappings["plugins"] прекрасно работает на любой странице, но если я попытаюсь создать экземпляр cfc, содержащий функцию, которая вызывает this.mappings["plugins"] - это не удастся.

Спасибо

РЕДАКТИРОВАТЬ: Я не уверен - вот что я пытаюсь сделать: В application.cfc:

this.mappings["Plugins"] = \
getDirectoryFromPath(getCurrentTemplatePath())&'Assets/Plugins';

и в stock.cfc:

<cfcomponent output="yes" > 
<cffunction name="showIndecies" access="public" output="yes" returntype="string">
<cfscript>
j = 1; 
variables.indeciesArray = ArrayNew(1); 
variables.indeciesFile = \
application.mappings["Plugins"]&'/StockMarketData/Data/indecies.csv'; 
</cfscript>

3 ответа

Решение

Я думаю, что вы называете отображение неправильно. Используя ваше определение в application.cfc:

this.mappings["plugins"]

Затем будет ссылаться в другом коде на "плагины" так:

var aName = new plugins.theCFC()
var aName = createObject("component","plugins.theCFC").init()
<cfinclude template="/plugins/aFile.cfm">

HTH, если не разместить свой код на странице вызова.

Внутри CFC, одним из которых является Application.cfc, область действия this относится только к этому конкретному CFC. Поэтому, когда вы находитесь на странице CFM, которая подпадает под юрисдикцию Application.cfc, тогда область действия "this" предназначена для Application.cfc, но когда она находится в CFC, она предназначена для этого конкретного CFC.

Тем не менее, зачем вам нужен прямой доступ к структуре отображений? Если вы хотите использовать это отображение для загрузки объекта или включения файла, вы можете просто сделать <cfinclude template="/plugins/path/to/myfile" /> или же <cfset obj = createobject("component","plugins.path.to.my.cfc") />,

Каков ваш вариант использования для прямого доступа к структуре? Вы пытаетесь изменить это?

* отредактировано для исправления кода

Если в CF9 ничего не изменилось, ваша первая ошибка в коде, который определяет ключи сопоставления без косой черты "/" в начале каждого имени сопоставления.

Вы определяете отображения как

this.mappings["plugins"] =

Это должно быть вместо

this.mappings["/plugins"] =

Обратите внимание на косую черту "/" в имени структурного ключа. Вы должны назвать каждое отображение таким образом.

Тогда вы бы ссылались на сопоставления, как упомянул Сэм Фармер в своем комментарии "

Затем будет ссылаться в другом коде на "плагины" так:

var aName = new plugins.theCFC()
var aName = createObject("component","plugins.theCFC").init()
<cfinclude template="/plugins/aFile.cfm">
Другие вопросы по тегам