Как я могу иметь теги ColdFusion в переменной и оценивать их? - PullRequest
1 голос
/ 30 сентября 2011

Я получил переменную, которая может содержать пользовательский тег CF.Например,

<cfset a = '<model:sparkline id="1"/>'/>

И я бы хотел, чтобы это было оценено в HTML и выведено.Не уверен, как / если я смогу это сделать.

Ответы [ 3 ]

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

Можете ли вы изменить пользовательский тег? Если это так, вы можете использовать область действия caller для установки переменной на вызывающей странице. Таким образом, внутри пользовательского тега вы можете сделать <cfset caller.a = "whatever" />, и это установит значение в области variables вызывающей страницы.

Если вы не хотите изменять пользовательский тег, вы можете использовать <cfsavecontent>, чтобы сохранить вывод в переменную. Пример:

<cfsavecontent variable="a">
    <model:sparkline id="1" />
</cfsavecontent>
1 голос
/ 03 октября 2011

Невозможно вывести код и заставить его выполнить.ВЫХОД просто означает выход.Это не означает «запустить».

Единственный способ получить код CF, который будет выполняться CF, - это следовать обычным каналам: * запросить шаблон;* включить шаблон;* вызывать шаблон как пользовательский тег или CFMODULE;* вызвать метод в CFC;* любые другие?В любом случае, вы поняли.

Так что если у вас есть код, который вы динамически создаете и хотите выполнить ... вам нужно записать его в файл и затем вызвать его с помощью наиболее подходящего из этих механизмов.Тем не менее, будьте осторожны: такой динамический запуск кода требует значительных накладных расходов, так как код должен быть скомпилирован перед запуском, а компиляция - не самый быстрый процесс в этой схеме.Лучшее, что можно сделать здесь, - это попытаться написать и скомпилировать файл до того, как он понадобится, и переписать только тот файл, который ему нужно обновить.Не повторяйте это каждый запрос.Но, в идеале, не делайте такого рода вещи вообще.Обычно к вещам можно подходить по-другому.

1 голос
/ 30 сентября 2011

Sean Coyne ответ правильный, если импорт включен в тот же контекст, что и тег cfsavecontent:

<cfimport taglib="./tags" prefix="model">

<cfsavecontent variable="a">
    <model:sparkline id="1" />
</cfsavecontent>

<cfoutput>#a#</cfoutput>

Результатом будет динамически вычисляемый вывод пользовательского тега sparkline.

...