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