2012-03-09 46 views
2

JavascriptメソッドからGrailsコントローラーに呼び出しをマップするにはどうすればよいですか?私はなく、Grailsのと、PHPを使用する方法を参照してください。Grails - Javascriptメソッドからコントローラーとレンダリングテンプレートを呼び出す

function getSelected(checkList) 
     { 
      var idList = new Array(); 
      var loopCounter = 0; 
      //find all the checked checkboxes 
      jQuery("input[name=" + checkList + "]:checked").each 
      (
       function() 
       { 
       //fill the array with the values 
       idList[loopCounter] = jQuery(this).val(); 
       loopCounter += 1; 
       } 
      ); 

      //call here 

     } 

編集:あなたはここに求めている二つの種類があるよう

${remoteFunction(controller:"person", action:"runThroughAll", params:"[ids:idList]")} 
+0

ライアン - あなたはGrailsのコントローラにAjax呼び出しをしようとしていますか? – JSager

+0

ええと - 最終的には、IdListを使ってJSメソッドからテンプレートをレンダリングするコントローラメソッド呼び出しをしたいと思います。 – user82302124

+0

ok gimme a sec。 – JSager

答えて

6

だから、私は感じています。私はそれらに取り組むつもりです。まず、JavaScriptからGrailsコントローラへの呼び出しのURLを取得するにはどうすればよいですか?

<script> 
myapp.url.root = "<g:resource dir='' file='' />" + "/"; 
</script> 

が展開だどこあなたのアプリの基本ルートを与える:私のGSPページでは(私は私のメインのレイアウトでそれを行うが、何でも)、私はこの小さなトリックをしたいです。その後、あなたはJavaScriptであなたのURLを構築することができます。

myurl = myapp.url.root + "パス/に/コントローラ"

そして、そのURLを使用してjQueryのAJAX呼び出しを行います。

次に、コントローラが、ちょうど表現したURLパターンに応答するように設定されていることを確認します。

2番目の質問は、「どのようにHTMLフラグメントを返すことができますか?

コントローラの内部では、リクエストからパラメータを取得し、必要なものを見つけ出してから、gspをレンダリングして、作成したモデルを渡します。次にjQueryのでは、あなたの成功のハンドラは引数あなたがDOMに追加/操作/検査することができます返された応答として取得します

def show() { 
    def data = [hypothesis : metadataService.getHypothesis(params.id) as JSON] 
    render(view:"create", model:data) 
} 

:それはこのようになります。

うまくいけばすべて意味がありました。私が何かをぼかしたり、あなたが求めていた質問に答えなかったら、私に知らせてください。

EDIT:今後の参考のために、ここで私たちはチャットに到着した書き換えjavascriptの方法は次のとおりです。

function getSelected(checkList){ 
var idList = $("input[name='" + checkList + "']:checked").map(function(){ return $(this).val(); }); 

$.ajax({ 
url: "/path/to/controller", 
type:"POST", 
data:{ids:JSON.stringify(idList)} 
success:mySuccessFunction 
}); 
} 
+0

jQueryのAJAX呼び出しとコントローラメソッドをもう少し細かくしたい場合や、GSPがどのようなものかを示すために私が必要であれば教えてください。 – JSager

+0

また、これは使用するのに最適なパターンではないと私は思う。私はGrailsアプリケーションに* data *を求め、jQueryを使ってマークアップを作成する方が、grailsアプリにマークアップを求めるよりも好きです。 – JSager

+0

私はこれを試してみましょう - 私は基本的にリストから選択したすべてのチェックボックスを引っ張り、そのIDに基づいてそれらのドメインオブジェクトに対してアクションを実行し、次にレンダリングする必要があるので、このアプローチは奇妙です。周囲に別の方法があるかどうかはわかりませんが、これを試してみます - ありがとう、あなたの投稿を続けてください。 – user82302124