1

ColdFusion を使用しているプロジェクトがあり、ドロップダウンのあるフォームがあります。

See example: http://jsfiddle.net/mwoods98/KXmNK/

ドロップダウンが選択されたら、ドロップダウンの下にあるフォームに入力する情報を返す ColdFusion cfc を ajax 呼び出しで呼び出す必要があります。

上記のフィドルを例として使用すると、ユーザーが「2」を選択した場合、名前フィールドには Bob、202 Fake Street、111-555-1234 が表示されます。「3」を選択すると、CFC (データベース) から返されたものをすべて取得します。

CFC には、ドロップダウンを介して送信された数値の値に基づいて情報を取得するメソッド呼び出しだけが含まれます。

どんな助けでも大歓迎です。

ありがとう

4

3 に答える 3

3

jQuery を使用している場合は、jquery に組み込まれている ajax 関数を使用して CFC を呼び出し、結果を返し、フィールドに入力することができます。ところで、これを行いたい場合は、フィールドに ID を配置すると非常に役立ちます。

$.ajax({
    type: 'get',
    url: 'pathToMy.cfc',
    data: {method:'getNameAddressAndNumberFromID'
        , myID : valueOfItemSelectedInDropDown
        },
    dataType: 'json',
    async: false,
    success: function(result){
         $('#myNameInput').val(result.NAME);
         $('#myNameInput').val(result.ADDRESS);
         $('#myNameInput').val(result.NUMBER);
        }
    }); 

「getNameAddressAndNumberFromID」メソッドを持つ「pathToMy.cfc」という名前の CFC があり、Name のような入力に ID があるとします。

<input name="name" id="myNameInput" type="Text">

メソッドの結果は、クエリから名前、住所、および番号を返すことができます。この情報を JSON として返すと非常に役立ちます。

これで正しい軌道に乗るはずです。幸運を祈ります。

于 2013-05-01T22:14:40.740 に答える
2

私の例では、階層依存のドロップダウンのセットがあります (Coldbox 3.5+、CF9)。

bindCFC と cfajax を使用して、最初の 2 つのドロップダウンが依存している例を次に示します。

私のビュースニペット

<cfform>
    <cfselect name="groups" id="groups" bind="cfc:#getSetting('AppMapping')#.model.dynform.getGroups()" 
         bindOnLoad="Yes" 
         display="group_name" 
         value="group_id" />

    <cfselect name="events" id="events" selected="#form.event_id#" 
          bind="cfc:#getSetting('AppMapping')#.model.dynform.getEventsByGroup({groups})" 
          display="event_name" 
          value="event_id" 
          queryPosition="below">
</cfform>

私のモデル(dynform)スニペット

<cffunction name="getGroups" access="remote" output="false" returntype="query"> 
    <cfset var qGroups = "">
    <cfquery datasource="#application.DSN#" name="qGroups">
       SELECT
               egc.nd_event_group_id                  group_id,
               egc.short_desc                         group_name
       FROM    event_group_code egc
       WHERE   egc.status_code = 'A'
       ORDER BY egc.sort_order
    </cfquery>
    <cfreturn qGroups>
</cffunction>

<cffunction name="getEventsByGroup" access="remote" output="false" returntype="query">
    <cfargument name="event_group_id" type="string" required="true">    
    <cfset var qEventsByGroup = "">
    <cfquery datasource="#application.DSN#" name="qEventsByGroup">
        SELECT ec.event_id,           
               ec.FULL_DESC as event_name              
        FROM   events ec
        WHERE  ec.event_group_id =  <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.event_group_id#"> 

    </cfquery>
    <cfreturn qEventsByGroup>
</cffunction>

上記は機能しますが、jQuery / ajax return JSON アプローチのためにそれを捨てることになりました。理由:

  1. Coldbox の方法 = ビューではなくハンドラーが作業を行う必要があります

  2. CFajax/cfselect は jQuery ajax よりも遅く、オプションも少なかった。(複数選択ボックスが必要な場合はどうすればよいですか? または、2 つではなく 3 つのデータ属性が返されますか?)

  3. cfselect に必要な cfform タグをビューで使用したくなかった

必要に応じてjQuery ajaxの方法を投稿できますが、元の質問に答えたと思います

于 2013-05-02T14:53:41.510 に答える
0

これを行う最も簡単な方法は、cfselect の bind 属性を使用することです。ただし、この方法を使用するか、独自の jquery をロールするかに関係なく、次のようにします。

  1. クエリが cfc にない場合でも機能することを確認してください。
  2. クエリが cfc にあり、cfinvoke を使用して、またはオブジェクトから呼び出しているときに、クエリが機能することを確認してください。

そうすれば、ajax からの呼び出しで問題が発生した場合でも、問題が cfc にあるわけではないことがわかります。

于 2013-05-01T22:47:08.800 に答える