Передача определенных значений в пользовательские теги
Я хотел бы передать конкретные значения в различные пользовательские теги, например:
<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 передаются как ссылки на объект.
Если тег или функция получает копию данных вызывающей страницы, изменения в переменной пользовательского тега или функции не изменяют значение переменной на вызывающей странице. Если переменная передается по ссылке, изменения в переменной в пользовательском теге или функции также изменяют значение переменной на вызывающей странице.
Чтобы передать переменную в пользовательский тег, необходимо указать имя переменной в числовых знаках. Чтобы передать переменную в функцию, не заключайте имя переменной в числовые знаки.