4

这个问题是一年多前提出并回答的。从那时起,ColdFusion 10 发布了,但文档很差。这个问题完全是关于 ColdFusion 10 和 CFSCRIPT 的。

我有兴趣仅在 CFSCRIPT 中编写此代码,并且绝对不使用 CFHTMLHEAD 标记。

<cffunction name="HTMLHead" output="false" returnType="void">
    <cfargument name="text" type="string" required="yes">
    <cfhtmlhead text="#text#">
</cffunction>

这就是我认为它应该如何工作

// CREATE PAGE TITLE 
function createPageTitle(Content) {
    LOCAL.Content = ARGUMENTS.Content;
    LOCAL.Content = "<title>#LOCAL.Content#</title>";
    LOCAL.Content = htmlhead(LOCAL.Content);
}

我找不到有关如何完成此操作的任何文档,但它似乎是 CFSCRIPT 中首先包含的内容之一。

4

3 回答 3

6

我不认为有。但是你看过 GitHub 上的CFScript 社区组件项目吗?那里有一个cfhtmlhead的实现。

于 2012-10-21T15:41:12.560 回答
5

CFScript 社区项目的东西会起作用,但看看他们是如何实现<cfhtmlhead>的,我有点畏缩。

但是我会本着他们正在做的事情的精神去编写一个 UDF,但我会尽可能地模拟如何<cfhtmlhead>实现:

<cffunction name="cfHtmlHead">
    <cfhtmlhead attributecollection="arguments">
</cffunction>

(我也会用返回类型/访问/输出/<cfargument>标签等来处理它)。

我确实为我的编码维护了一个 CFML.cfc,它填补了我运行的旧版本 ColdFusion 的空白,它没有那么多 CFScript 准备就绪,但它只是一个函数库,充满了类似的 UDF。我没有实现需要实例化的单个 CFC,并且调用标记的等效函数的方式与调用标记的方式无关。这让 IMO 感到困惑且设计不佳。

显然,里程各不相同。

于 2012-10-21T16:02:05.453 回答
4

如果不想回退到使用包含基于标签的功能的 UDF,那么可以<head>通过查看输出缓冲区,在请求末尾插入需要进入块的内容,找到结束</head>标记,然后将 [stuff] 插入到它之前的缓冲区中。

认为输出缓冲区位于getPageContext().getOut(). 那里有一些方法可以对付它。幸运的是,Elliott Sprehn 已经完成了这项工作,Ben Nadel 的博客上有一条关于如何做的评论:http ://www.bennadel.com/blog/758-ColdFusion-GetPageContext-Massive-Exploration.htm (向下滚动到Elliott 的第三条评论)。

That said... I recommend this for the sake of "proof of concept", and I'd still go with the tag-based UDF wrapper approach.

于 2012-10-21T17:03:04.487 回答