Вопрос

Как получить отображения, которые я определил в 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">
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top