Имя переменной в методе объекта ColdFusion - PullRequest
3 голосов
/ 28 октября 2011

Я пытаюсь установить переменную в функции.

Результат таков:

<cfset local.layouts.appLayout = '../../app/layouts' & local.appController.new()>

Приведенный выше код работает.В структуре local.layouts.appLayout он назначает возврат нового метода в appControler.Это то, что мне нужно для этого.

Моя проблема в том, что мне нужно динамически назначать часть метода этого оператора.У меня есть другая переменная coreRoute.action, которая равна «new» в этой функции, но я не могу понять правильный синтаксис.

Я пробовал это:

<cfset local.layouts.appLayout = '../../app/layouts' & local.appController.coreRoute.action()>

Это не работает иЯ понимаю почему.Я также попробовал это:

<cfset local.layouts.appLayout = '../../app/layouts' & local.appController & #coreRoute.action# & '()'>

Я пробовал много вариантов этого синтаксиса, и я просто не могу понять это правильно.

У кого-нибудь есть какие-либо идеи о том, как это сделать.Я застрял.

Заранее благодарен за любую помощь.

ОБНОВЛЕНИЕ: С помощью Тодда Шарпа я в конечном итоге воспользовался этим, и он отлично работал:

<cfinvoke component="#local.appController#" method="#coreRoute.action#" returnvariable="local.act">

            <cfset local.layouts.appLayout = '../../app/layouts' & local.act>

Ответы [ 2 ]

7 голосов
/ 28 октября 2011

Вы должны использовать <cfinvoke> для динамического вызова метода. Попробуйте в Google выполнить поиск "динамического вызова метода coldfusion" - вот один из лучших результатов:

http://www.bennadel.com/blog/1320-ColdFusion-CFInvoke-Eliminates-The-Need-For-Evaluate-When-Dynamically-Executing-User-Defined-Functions.htm

2 голосов
/ 30 октября 2011

Кроме того, если вы хотите сделать это полностью в сценарии, вы можете, используя этот подход:

dynFn = this["foo" & bar];
dynFn(stuff);

Это в CFC, если вы делаете это вне CFC или нетиспользуя cfc вообще, просто измените «this» на ваш метод.

...