2013-01-01 8 views
6

古いサイトをCF 10に変換していて、自分のヘルパーコードをいくつか持ってきたかったのです。ColdFusion - クエリをCFCセッターに変換する

コードは、クエリを見て、私たちのインスタンスである事を発見し、それらを取り込みます

<cffunction name="populateSelf"> 
    <cfargument name="source" type="query" required="yes" /> 
    <cfif arguments.source.recordcount EQ 1> 
     <cfloop list="#arguments.source.columnlist#" index="local.col"> 
      <cfif structKeyExists(variables.instance, local.col)> 
       <cfset variables.instance[local.col] = arguments.source[local.col]) /> 
      </cfif> 
     </cfloop> 
    </cfif> <!--- one record? ---> 
</cffunction> 

私が使用して私たちの現在のプロパティ「のgetMetaDataを()」の便利な評価でstructKeyExists(variables.instance, local.col)を交換しました、 ...

ために、私は<cfset this[local.col] =arguments.source[local.col] />に変更した場合<cfset variables.instance[local.col] = arguments.source[local.col]) />

が、それは暗黙のセッターを無視し、ちょうどこの範囲に結果を置きます:が、私は次の行とのトラブルを抱えています私たちのセッターを試してみて、呼び出すために、私はこのコードのビットを試してみました:

<cfset setValue =arguments.source[local.col] /> 
<cfset evaluate("set#local.col#('#setValue#')" /> 

が、これは(あまりにも、文字列内の任意の「'」のをエスケープする必要が)複雑でエラーが発生しやすいようです。

明示的にthis.setPROPERTYNAME(query.COLUMN)を数回呼び出すことなく、クエリを使用してCFCのプロパティの一部またはすべてを読み込む最良の方法は何ですか?あなたが動的にメソッドを呼び出したい場合は

答えて

7

これを正しく読んでいれば、あなたの質問は実際にはどうすればメソッドを動的に呼び出すことができますか?残りのすべてはドレッシングに設定されていますか?

myMethodName = "set#local.col#"; 
myMethodReference = this[myMethodName]; 
myMethodReference(arguments.source[local.col]); 
+0

はい! "メソッドを動的に呼び出すにはどうすればいいですか?"私は正しい動詞を使用することができませんでした... stoopid休日、私の脳が漏れている。 –

+2

ちょっとスティーブン... @ baynezyの答えは私より優れています!彼は私が提案したものではなく、彼が提案したものと一緒に走るべきです。 –

6

あなたは

<cfinvoke method="set#property#"> 

メイクセンスのcfinvoke使用できますか?

+1

実際ええ良いコール:

その後、参照を経由して関数を呼び出す、と関数参照を設定し、その後、動的な変数名を設定するために文字列を使用することができます。機能参照で馬鹿を保存します。 –

+0

私はを試みましたが、引数の名前を知らないので、引数を受け入れることができません。 (幸運にもを試みました)... –

+0

ああ、私はあなたの問題を見る。メソッド自体の命名規則と同じ方法で、セッターの引数名の命名規則を持っていませんか?あなたがそれを行うならば、前に加えたものに加えてcfinvokeargumentを追加して使うこともできます。 – baynezy

関連する問題