2 つの異なるコンポーネントを何らかの形式のデータ構造に追加し、それらをダンプするときに、Coldfusion で奇妙なバグを発見しました。
この質問のために、コードを単純化しました。コンポーネント A とコンポーネント B があり、どちらにも 1 つのプロパティ、1 つのコンストラクター、1 つの関数があります。
A のインスタンスと B のインスタンスを作成します。インスタンスを別々にダンプすると、正しいメタデータが表示されます。
ただし、2 つのインスタンスをデータ構造 (最初のスロットにコンポーネント B、2 番目にコンポーネント 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 />
画像