我可以在 cfscript 中调用自定义标签吗?
例如,如果我有一个像
这样的自定义标签,我的假设将类似于 AppSwitch(action="Check")
,但是我不确定 CF 是否可以将其解析为自定义标签。
我能想到的另一个解决方案是编写一个包装函数并调用我的自定义标签,但这感觉多余。
看来我过于简单化了一个更复杂的问题,所以 任何见解将不胜感激(即使是为什么不/不应该支持)。
For example, if I have a custom tag like <cf_AppSwitch action="Check">
my assumption would be something like AppSwitch(action="Check")
, but I am not certain CF can resolve that as a custom tag.
The other solution I can think of would be to write a wrapper function and call my custom tag, but that feels redundant.
It seems like I am oversimplifying a much more complex problem, so
any insight would be appreciated (even as to why this is not/should not be supported).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
更新2:
这是一个更糟糕的方式(或者是一个糟糕的断言者?)。警告:下面未记录的功能(但仍然很酷):
假设自定义标记返回如下值:
因此标记的结果属性需要一个将设置到调用者中的变量名称。现在使用下面的方法我们可以通过 cfscript 访问该结果。
更新:
以下解决方案可能会导致不良副作用。如果您的自定义标记返回一个值,您将无法访问它,因为该标记是从组件调用的,返回变量将被放入组件的变量范围中,而不是调用模板。当然,如果您要返回一个值,您可能应该使用 CFC(正如我上面评论的那样),因此使用风险自负。
这种方法怎么样(从 Jake 的修改而来):
CustomTagProxy.cfc:
echo.cfm:
time.cfm:
index.cfm:
Update 2:
Here's an even badder ass (or is it bad asser?) way. Warning: undocumented features below (but still cool):
Assume the custom tag returns a value like so:
So the result attribute of the tag expects a variable name that will be set into the caller. Now using the method below we can access that result via cfscript.
Update:
The solution below may cause an undesired side effect. If your custom tag returns a value you will not have access to it since the tag is called from the component the return variable gets put into the variables scope of the component, not the calling template. Of course, if you're returning a value you should probably be using a CFC anyways (as I commented above) so use at your own risk.
How about this approach (modified from Jake's):
CustomTagProxy.cfc:
echo.cfm:
time.cfm:
index.cfm:
假设您使用的是 Adobe CF,不幸的是答案是否定的。您必须编写一个基于 CFML 的包装函数。例如:
现在,如果您使用 Railo,则可以使用与
< 等效的 cfscript ;cfmodule>
标签:Assuming you are using Adobe CF, unfortunately the answer is no. You have to write a wrapper function that is CFML-based. For example:
Now, if you are using Railo, you could use the cfscript equivalent to the
<cfmodule>
tag:2021 年更新:
ColdFusion 的最新版本增强了 cfscript 支持,将允许您调用类似于函数的自定义标记。
相当于
我还没有找到嵌套自定义标签或获取 generatedContent 的本机解决方案,所以我做了一个解决方法。
我使用名为“ generatedContentOverride”的自定义属性将内容传递到自定义标记。
在自定义标记代码中,我查找该属性并使用它来代替 thisTag. generatedContent。
Update for 2021:
Recent versions of ColdFusion that have enhanced cfscript support will allow you to call a custom tag similar to a function.
equates to
I have not found a native solution to nesting custom tags or getting the generatedContent, so I made a workaround.
I pass content in to the custom tag using a custom attribute named "generatedContentOverride".
In the custom tag code, I look for that attribute and use it in place of thisTag.generatedContent.