2

在将两个不同的组件添加到某种形式的数据结构中并将它们转储出来时,我在 Coldfusion 中发现了一个奇怪的错误。

出于这个问题的目的,我简化了我的代码。我有组件 A 和组件 B,它们都有一个属性、一个构造函数和一个函数。

我创建了一个 A 的实例和一个 B 的实例。当我分别转储这些实例时,我看到了正确的元数据。

但是,当我将两个实例添加到数据结构(第一个插槽中的组件 B,第二个插槽中的 A)时,似乎插槽 1 中的实例中的方法在插槽 2 中的实例中重复,即使它们是不同的对象. 即,我看到 CompBFunction、GetCompBProp、SetCompBProp 列为 Comp A 的方法。但是这些属性看起来是正确的。

值得一提的是,我无法在 Comp A 上调用 Comp B 的方法 - 这似乎是一个显示问题。我尝试在我的对象“a”上调用 CompBFunction,但它按预期失败。

在这里的任何帮助将不胜感激。我知道这不是一个大问题 - 但是当它们不存在时在这里看到这些方法可能会产生误导。在我的代码中有很多实例,我想建立一个混合组件的数据结构。

抱歉,如果以前有人问过这个问题 - 我搜索了高低,但找不到任何信息。我正在使用CF9。

这是我的示例代码:-

组分 A

component name="CompA" output="false" cache="false" accessors="true" {
    property name="CompAprop" type="Numeric" getter="true" setter="true";

    public CompA function init() output="false" {
        return this;
    }

    public String function CompAFunction() output="false" {
    return "All";
    }
}

B组份

component name="CompB" output="false" cache="false" accessors="true" {
    property name="CompBprop" type="Numeric" getter="true" setter="true";

    public CompB function init() output="false" {
        return this;
    }

    public String function CompBFunction() output="false" {
    return "All";
    }
}

索引.cfm

<cfset a = new CompA() />
<cfset b = new CompB() />

<cfset test = ArrayNew(1) />
<cfset test[1] = b />
<cfset test[2] = a />

<cfdump var="#test#" /> <!--- METHODS FOR B APPEAR IN METADATA FOR A --->
<cfdump var="#test[1]#" /> <!--- METADATA CORRECT --->
<cfdump var="#test[2]#" /> <!--- METADATA CORRECT --->
<cfabort />

图片

直接转储

转储数据结构

4

1 回答 1

0

它在 CF 9.0.1(更新:和CF10)上对我来说很好,而且我从来没有遇到过你过去描述的问题。如果这是 ColdFusion 的实际问题,人们会将此作为错误提出,因为我认为它会相当频繁地出现。

已经注意到您将 CompB 放入索引 1 处的数组中,并将 CompA 放入元素 2 中,是吗?这与您在问题“但是当我将两个实例添加到数据结构(第一个插槽中的组件 A,第二个插槽中的 B)”中所说的内容相冲突。所以人们会期望他们是“错误”的方式吗?

于 2013-06-27T11:36:06.553 回答