0

別のコンポーネントをプロキシする cf コンポーネントを作成しようとしています。現時点では、コードは次のようになっています: (例のために省略しています):

public MyFuseboxProxy function init( Required any myFb ){
    variables.myFusebox = arguments.myFb;
    return this;
}

this.do = variables.proxy;

private any function proxy(){   
    var local.functionName = getFunctionCalledName();
    var local.function = variables.myFusebox[local.functionName];
    var local.returnVal = local.function( arguments );
    ...
}

ご覧のとおり、非常に簡単です。初期化時にターゲット オブジェクトを渡し、プロキシ メソッドを使用して関数呼び出しをインターセプトします。私はcfscriptを使用していますが、cfinvokeを使用したくないため、このアプローチを使用しています。

次に、次のようにプロキシを呼び出します。

var local.proxy = new ab.MyFuseboxProxy( myFusebox ); 
var local.dump = local.proxy.do ( action='display.body', contentvariable="body" );

ただし、上記のコードを実行すると、次のエラーが発生します。

do 関数に渡された ACTION 引数が文字列型ではありません。

この引数の型としてコンポーネント名を指定した場合、コンポーネントの定義ファイルが見つからないか、アクセスできない可能性があります。

C:/ColdFusion10/cfusion/wwwroot/fusebox5/myFusebox.cfc: 行 301 でエラーが発生しました

エラーはターゲットコンポーネントで報告されているため、関数が呼び出され、引数が渡されたように見えますが、型は保存されておらず、文字列として認識されていません。

私が間違っていることや、引数の型を保持する方法を教えてもらえますか?

4

1 に答える 1

1

うん、私はこれの代わりに疑う:

var local.returnVal = local.function( arguments );

あなたはこれを意味します:

var local.returnVal = local.function(argumentCollection=arguments );

現在のコードは、最初に渡されたとおりに引数を渡すのではなく、引数を最初の引数として渡しています。

于 2013-07-01T20:49:17.140 に答える