2012-03-13 7 views
1

私は、GSP(actionSubmit)のボタンを押して(javascript関数の呼び出しを含む)終了時にdivを更新したいという状況があります。 。私は最終的に最終的にコントローラでresultResultsパラメータとdivを結果(現在動作している)にレンダリングします。Grails - remoteSubmit内のjavascript呼び出しでdivをレンダリングする

問題は、私は(おそらく)私のactionSubmitをremoteFormにラップする必要があるということです。しかし、どうすればいいですか: 1)javascriptメソッドはonClickに既に存在しています 2)コントローラでページをレンダリングします。

コントローラでラップしてみると、remoteFormアクションが終了し、javascriptアクションが「ハング」して終了しません。

アイデア?

List.gsp

<g:actionSubmit type="button" value="Ping All" onclick="getIds('contactList');"/> 

    function getIds(checkList) 
     { 
      var idList = new Array(); 
      jQuery("input[name=" + checkList + "]:checked").each 
      ( 
       function() { 
        idList.push(jQuery(this).val()); 
       } 
      ); 

      $.ajax({ 
       url: "pingAll", 
       type:"GET", 
       data:{ids:JSON.stringify(idList)} 
      }); 
     } 

コントローラ:

1)あなたはGrailsのリモートタグ(formRemote、remoteFieldなどの使用を避けることができます:あなたはカップルのオプションがあり

def pingAll() { 

    String ids = params.ids 
    if(ids == "[]") { 
     render(template:'searchResults', model:[searchResults:""]) 
     return 
    } 

    def idArray = contactService.formatIDString(ids) 

    idArray.each { 
     def contactInstance = Contact.get(Integer.parseInt(it)) 
     emailPingService.ping(contactInstance) 
    } 

    /** 
    * Added this on 3/13. Commented out line was initial code. 
    */ 
    def searchResults = contactSearchService.refactorSearchResults(contactSearchService.searchResults) 
    render(template:'searchResults', model:[searchResults:searchResults, total:searchResults.size()]) 
} 

答えて

2

)、私は実際に彼らがどのように働いているかを探り理解することを奨励します。 Grailsのリモートタグは一般的にあまり柔軟性がありません。どのように動作するかを知る最も良い方法は、Grailsのオンラインドキュメントのサンプルを使っていくつかのサンプルタグを書いてから、Webブラウザでレンダリングされたページを調べることです。一般に発言しているすべてのタグは、Grailsタグで定義した属性を持つ基本HTMLとして出力されます。お気に入りのHTMLソースビュー(Firebug)を開き、レンダリングされたHTMLのGrails出力を確認します。

私がこれを言う理由は、これまでに書いたコードが、GSPタグを使用せずに上記のことを幾分達成しているからです。

グラム:actionSubmit あなたは(それがあなたのvalue属性で指定されたアクションを実行しますので、あなたはここではない持っている)ユーザーが定義したコントローラのアクションを使用して作業しているフォームを送信します。しかし、あなたはまた、あなたのpingAllアクションにデータを送信するAJAX呼び出しを実行しているあなたのactionSubmitにonClickを持っています。残りのコードを見ずに、あなたのフォームに他に何が含まれているかは、フォームを2回提出しています。

actionSubmitを書き込まず、単にonClickを使用してボタン(入力しない)の入力を行うだけでよいのです。次に実行されるJavaScriptの関数の中で、あなたのAJAX呼び出し

$.ajax({ 
    url: "pingAll", 
    type:"GET", 
    data:{ids:JSON.stringify(idList)}, 
    success:function(data) { 
     $('#your-updatedDiv-id-here').html(data); 
    } 
}); 

2)あなたはGSPタグを使用したい場合は、私はあなたが間違ったものを使用していると思うのためのjQueryの成功オプションを定義します。あなたの使用法やフォームデータの全範囲がわからなければ、g:formRemote、g:submitToRemote、g:remoteFunctionはあなたの目的に役立ちます。すべてには、リモート呼び出しの前にjavascriptを呼び出すために定義できる属性があります。また、更新するdivとさまざまなイベントハンドラを定義することもできます。

+0

ビンゴのjavascriptエントリです。私はpingAllコール中に私のサービス変数を更新し、JavascriptでHTMLリフレッシュを処理することができました。ありがとうございました! – user82302124

関連する問題