Передача определенных значений в пользовательские теги

Я хотел бы передать конкретные значения в различные пользовательские теги, например:

<cfif someerror>
  <cfset mytag.bordercolor = "red">
</cfif>

<cf_input id="mytag">

Возможно ли это как-то?

2 ответа

Решение

Я не уверен, что слежу за вашим вопросом, поэтому я выброшу некоторую, возможно, соответствующую информацию.

Синтаксис, который вы ввели, будет работать.

В файле input.cfm вы бы ссылались на Attributes.id. Значение которого будет "mytag".

Я бы предложил использовать cfparam для установки значения по умолчанию.

 <cfparam name="Attributes.id" type="string" default="tag">

например.

Если вы хотите передать структуру "mytag" вместо строки "mytag", вы должны использовать следующий синтаксис:

 <cf_input id="#mytag#">

Это позволит вам получить цвет, используя Attributes.mytag.bordercolor.

В этом случае ваш cfparam будет больше похож на:

 <cfparam name="Attributes.id" default="#StructNew()#">

Если вы хотите передать строку, но при этом получить цвет из области видимости переменных, то это будет примерно так:

 <cfif StructKeyExists(Caller,Attributes.id) AND StructKeyExists(Caller[Attributes.id],"bordercolor")>
   <cfset Variables.bordercolor = Caller[Attributes.id].bordercolor>
 </cfif>

Это связано с тем, что область видимости переменных вызывающей страницы доступна в пользовательском теге как область действия "Caller". Однако я бы посоветовал быть осторожным в использовании этого, так как вы нарушаете инкапсуляцию. Если вы обращаетесь к именам переменных, которые конкретно передаются, это, вероятно, нормально, но, как правило, было бы неплохо получать не указанные переменные из области видимости Caller.

Согласно документации, что у вас должно работать, за исключением того, что вы забыли заключить имя переменной между хэштегами #, Попробуйте это вместо этого:

<cf_input id="#mytag#">

Следует помнить о некоторых важных моментах передачи переменных в пользовательские теги. Из документации - передача переменных в пользовательские теги и пользовательские функции

Передача переменных в теги CFML и UDF

Когда вы передаете переменную в пользовательский тег CFML в качестве атрибута или в пользовательскую функцию в качестве аргумента, следующие правила определяют, получает ли пользовательский тег или функция свою собственную личную копию переменной или получает только ссылку на переменная вызывающей страницы:

  • Простые переменные и массивы передаются как копии данных. Если ваш аргумент является выражением, которое содержит несколько простых переменных, результат вычисления выражения копируется в функцию или тег.
  • Структуры, запросы и объекты cfobject передаются как ссылки на объект.
    Если тег или функция получает копию данных вызывающей страницы, изменения в переменной пользовательского тега или функции не изменяют значение переменной на вызывающей странице. Если переменная передается по ссылке, изменения в переменной в пользовательском теге или функции также изменяют значение переменной на вызывающей странице.
    Чтобы передать переменную в пользовательский тег, необходимо указать имя переменной в числовых знаках. Чтобы передать переменную в функцию, не заключайте имя переменной в числовые знаки.
Другие вопросы по тегам