2

CFBuilderの「createCFC」プラグインを使用してテーブルのサービスを作成したので、OODを試してみることができました。現在、動的に生成された「更新」関数を使用するのに苦労しています。

アカウントの構造を取得するためにcfcを呼び出し、IDを渡します。

<cfinvoke component="cfc.Account.accountService" method="getAccount" returnvariable="Account" AccountID="#session.auth.AccountID#">

手動のコードを使用して更新関数を呼び出すことができます。

<cfset Account.setAccountFirstname('#form.AccountFirstname#')>

これは問題なく機能しますが、フォームのデータに基づいて構造を動的に更新したいと思います。そこで、フォーム内のフィールドをループして、次のように生成することを考えました。

<!--- Dynanic call of submitted fields --->
<cfloop list="#form.FieldNames#" index="i">
    <cfset Account.set[i]('#Evaluate('#i#')#')>
    </cfloop>

もちろん、それは機能しません!何がうまくいくかアイデアはありますか?またはそれを処理するためのより良い方法は?

4

1 に答える 1

3

invokeで実行しようとしていることは機能しません。これは、属性をスタンドアロンコンポーネント引数(つまりクラスパス)として渡すため、代わりにオブジェクトインスタンスを渡す必要があるためです。

編集して追加:

<cfset account = new Account()/>
<cfset data = {
  accountId = session.auth.AccountID
}/>
<cfset fieldNames = listToArray(form.fieldNames)/>
<cfif ! arrayIsEmpty(fieldNames)>
  <cfloop array="#fieldNames#" index="fieldName">
    <cfinvoke 
      component="#account#"
      method="set#FieldName#" 
      returnVariable="methodResult" 
      argumentCollection="#data#"
    />
  </cfloop>
</cfif>
于 2012-10-27T16:44:43.347 に答える