Coldfusion this.mappings не работает в функции CFC ->
-
11-10-2019 - |
Вопрос
Как получить отображения, которые я определил в Application.cfc для работы в других функциях в других CFC?
т.е. this.mappings ["plugins"] работает просто нормально на любой странице, но если я попытаюсь создать CFC, содержащую функцию, которая вызывает это. Mappings ["Plugins"] - он не удается.
Благодарность
РЕДАКТИРОВАТЬ: Я не уверен - вот что я пытаюсь сделать: в Application.cfc:
this.mappings["Plugins"] = \
getDirectoryFromPath(getCurrentTemplatePath())&'Assets/Plugins';
и в складе. 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>
Решение
Я думаю, что вы называете неправильное отображение. Используя ваше определение в 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 - это одно, «этот» область относится только к этому конкретному ХФУ. Поэтому, когда вы находитесь на странице CFM, которая подпадает под юрисдикцию Application.cfc, то «этот» сфера предназначена для 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">