- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个问题的完整重现案例在我的 GitHub repository 中.我只会在这里重现必要的部分。
假设我使用了一些自定义标签:
<!--- testCfcTags.cfm --->
<cfimport taglib="cfcBasedTags" prefix="t">
Text before tags<br>
<t:grandparent gp:attr="set in grandparent">
Text in grandparent, before parent<br>
<t:parent p:attr="set in parent">
Text in parent, before child<br>
<t:child c:attr="set in child">
Text in child<br>
</t:child>
Text in parent, after child<br>
</t:parent>
Text in grandparent, after parent<br>
</t:grandparent>
Text after tags<br>
如果我使用的是基于 CFM 的自定义标签,并且我想将 child
标签实现中的数据与 grandparent
标签相关联,我会简单地说:
<!--- child.cfm --->
<cfif thistag.executionMode eq "end">
<cfassociate basetag="cf_grandparent" datacollection="childAttributesForGrandparent"><!--- this line --->
<cfassociate basetag="cf_parent" datacollection="childAttributesForParent">
</cfif>
注意我可以直接关联到祖 parent 标签。
我不知道如何使用 Lucee 基于 CFC 的自定义标签干净地做到这一点。
这是我能想到的最好的:
// Child.cfc
component {
function init(hasEndTag, parent){
this.parent = arguments.parent;
}
function onEndTag(attributes, caller, generatedContent){
writeOutput(generatedContent);
this.parent.childattributesForParent = attributes;
this.parent.parent.childattributesForGrandparent = attributes;
return false;
}
}
在 Parent.cfc 中我有这个:
// Parent.cfc
component {
function init(hasEndTag, parent){
this.parent = arguments.parent;
}
function onEndTag(attributes, caller, generatedContent){
writeOutput(generatedContent);
this.parent.parentattributesForGrandparent = attributes;
writeDump(var=this.childAttributesForParent, label="Parent childAttributesForParent");
return false;
}
}
累积(错误)使用父级和祖父级的 this
范围意味着我可以从子级通过 this.parent.parent
将内容直接塞入祖父级。
然而,这有点“Heath Robinson”。鉴于 Lucee 的其他基于 CFC 的自定义标记实现非常巧妙,我确信我只是遗漏了一些东西。我真的不认为我应该通过 Parent 挖洞才能到达 Grandparent。这也意味着对于 Child 直接在 Grandparent 中的情况,代码需要有所不同。我真正需要的是在 CFC 之间传递一些标记层次结构,而不仅仅是父级。
我用谷歌搜索了一下,但大部分内容都是我写的(这又是基于最初为 Railo 的实现而写的博客文章——这是 Lucee 实现的基础)。
我已经阅读过的文档没有帮助:
最佳答案
根据 Railo 博客:
http://blog.getrailo.com/post.cfm/cfc-based-custom-tags-by-example-part-1
You can use the tag cfassociate and the function GetBaseTagList and >GetBaseTagData the same way as for regular CFML based custom tags.
所以你可以这样做(在 cfscript 中):
cfassociate(basetag="cf_grandparent", datacollection="childAttributesForGrandparent");
我已经将要点和一些示例放在一起 - 我已经测试并验证了它在 Lucee 4.5.1 上的工作: https://gist.github.com/dajester2013/183e862915972d51279f
根据我的评论,这是一种通过基本标记的潜在方法 - 它至少掩盖了不太漂亮的方面:
基础标签.cfc
component accessors=true {
property name="tagName";
property name="parent";
property name="hasEndTag";
public BaseTag function init() {
structAppend(variables, arguments);
tagName = "cf_" & lcase(listLast(getMetaData(this).fullname,"."));
return this;
}
public any function getParent(string tagName, ancestors=1) {
if (!isNull(tagName)) {
var data = getBaseTagData(tagName, ancestors);
if (structKeyExists(data,"thisTag")) {
return data.thisTag;
// getBaseTagData returns the variables scope for CFC tags...
} else if (structKeyExists(data, "this")) {
return data.this;
}
} else if (!isNull(variables.parent)) {
return variables.parent;
}
}
private void function associate(required string tagName, string dataCollection=this.getTagName()) {
cfassociate(basetag=tagname, dataCollection=dataCollection);
}
}
测试子.cfc
component extends=BaseTag {
public function onStartTag() {
attributes._childId = randrange(1000,9000);
associate("cf_testtag", "testchildren");
writedump(var=this.getParent(),label='immediateparent');
writedump(var=this.getParent("cf_testtag"), label='testtag');
abort;
}
}
关于cfml - 使用基于 CFC 的自定义标签将子标签数据与祖 parent 标签相关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28578628/
我有一个具有多种功能的 cfc 文件 (info.cfc),如下所示。 ... SELECT
我将从 ColdFusion 8 迁移到 ColdFusion 10。 目前,在我的Unix根目录下,我只有1个Application.cfm,在这个根目录下我有大约10个子目录(以前的程序员就是这样
我需要一种方法来获取 Coldfusion 返回的 json 并将其显示在 jquery 中我可以很好地显示第一个结果,但如果返回多于一条记录,我就会陷入困境这是我的 cfc In this que
我有一个使用 cfc 的页面。像这样: 如果 cfc 位于文件夹内,我该如何调用它们?截至目前,它们仅在处于同一级别或同一文件夹内时才有效?您如何称呼处于不同级别的 cfc? 还是我不理解 cfc
我有一组从两个单独的应用程序范围访问的 CFC。 一个/Application.cfc 位于根目录中。 另一个应用程序在/Admin/Application.cfc cfc 位于/_cfc/ 如果我从
我已经看到了在父文件夹中扩展 cfc 可以访问父文件或 CF 管理的各种解决方案,但我还没有看到一个可行的解决方案来在“共享”/兄弟文件夹中扩展 cfc 而不访问父文件夹。 This solution
在我被要求研究冷融合应用程序中一些奇怪的间歇性错误之前,我没有使用过冷融合。 在阅读了有关范围之后,我认为问题是因为我的 cfc 函数中的所有变量都没有使用 var关键字,并且在各种函数中使用相同的变
参加晚会比较晚,我正试图过渡到使用 CFC 以简化事情。在这个阶段,我只是试图找到我的脚并理解它们 - 使用 CFWACK 9 作为指导。 然而,我的第一次尝试让我难住了! 这是我的 CFC 中的内容
好的,我是 Coldfusion 组件的新手,尽管我认为我在概念上理解它们。我接手了一个项目,在数据访问模型中,我只有一个 cfm,里面有这一行: 我需要修改这个组件背后的sql,但是无法根据这个
在装有 IIS 8.5 的 Server 2012 R2 上运行 ColdFusion 10 Update 18。我对 CFC 进行了更改,并创建了一个新的 CFC 文件来进行测试。我所做的更改没有反
对问题短语感到抱歉。我找不到更好的方式来描述它。但我的问题如下: 我有 3 个 cfc,即 settings.cfc、prices.cfc 和 helpers.cfc。这些 cfc 扩展了第 4 个
你怎么能管理这样的事情?我尽我最大的努力将子系统设计为可重用,但只有某些特定于站点的东西必须自定义(例如 Account 实体中的字段,或 orm 注释中的 cfc="")。 我曾想过使用 SVN 并
有没有办法通过像 firebug 或其他浏览器插件这样的胸罩来从 cfc 文件中进行跟踪或记录控制台。 如果这似乎是一个愚蠢的问题,我对 CF 完全陌生,很抱歉。 最佳答案 如果您希望日志在浏览器中可
我目前正在使用 标记调用 CFC 并传递参数。这真的很方便,因为我可以使用标签只传递我想要的参数,例如: 如果我使用 new()或 createObject()方法来创建 C
这个问题在这里已经有了答案: 9年前关闭。 Possible Duplicate: restart application without restarting server? 如何在不重置 Cold
我已经在 ColdFusion 中编写了一个数据库加载脚本,但我遇到了脚本缓慢耗尽内存的问题。我已经使用 将每个表负载拆分到它自己的线程中,并且当内存低于 50% 时我正在调用垃圾收集器(确保在 gc
在我们的 Portal application.cfc 中,我们定义(设置)我们的 DSN 连接,如下所示: (Main DB) (2nd DB) (3rd DB) 这些在标签中。然后我也移到了
我需要一个现实检查 - 希望一个解释(如果我的现实是错误的)。 CF应用框架评估事物的方式是这样的(我的理解) - 请求被传递到 cfserver cf 查找 application.cfm 或 cf
我使用CFBuilder“创建CFC”插件为表创建服务,所以我可以玩OOD。现在我正在努力使用以动态方式生成的“更新”功能。 我调用了一个 cfc,以获取帐户的结构,并传递一个 ID。 我可以使用手
我在网上做了一些搜索,看看这是否可以完成,但没有找到任何可以说的内容。我在根目录下有一个 application.cfc,并且有几个子文件夹,我希望它的功能相同,只有细微的差别。例如,根处的 cfc
我是一名优秀的程序员,十分优秀!