6

David Heinemeier Hanssonのblog postでサーバー生成のjavascriptを読んだ後、私はRailsアプリケーションでAJAX呼び出しを行う方法を見直すことにしました。デビッドが示唆しているのは、.js.erbテンプレートを作成することです。これは、サーバー上で生成されたRubyコードで埋め込まれたjavascriptであり、クライアント側のjavascriptではDOM操作を行わないテンプレートです。HTMLをAJAX Railsに返す

もう一つのアプローチはもちろん、クライアントサイドですべてを行うだけです。たとえば、サーバーから更新されたオブジェクトを表すJSONオブジェクトを返し、javascriptを使用してすべてのDOM操作を行います。

私は2つの理由から、最初のアプローチ嫌い:

1)私は自分のアプリケーションにHAMLとのCoffeeScriptを使用し、そしてバニラを使用して、JavaScriptとERBがuncecessarily異なる言語のコードと私のコードベースを膨らまだろうと感じて(おそらく、js.erbではなく.coffee.hamlテンプレートを作成することは可能ですが、わかりません)

2)私は本質的にjavascriptファイルである自分のビューフォルダを「ゴミ箱」にするのが嫌いです少しのルビーが埋め込まれています。

2番目のアプローチは、彼のブログ記事でDavidが語っているように、クライアントサイドのJavaScriptコードに頼りになり、クライアント側のJavaScriptコードが肥大化し、クライアント側のテンプレートが必要になる可能性がありますケースシナリオは、テンプレートの数をほぼ倍増させることになります。

私は行くことにした(と完全にこれについて移動する愚かな方法であるかどうかを聞いてみたい)アプローチは以下の通りです:

1)は、リンクやフォームがにAJAXを利用するためにremote: trueフラグを設定しますサーバーに投稿してください。

2)私のコントローラでは、すべてをhtmlとして処理し、要求がAJAXリクエストの場合はレイアウトなしでレンダリングします。render partial: '<partial-name>', layout: false if request.xhr?。これは部分的にHTMLを返し、ルビコードを評価します。

3)アセットのjavascriptファイル(たとえば、<partial-name>.js.coffee)で、ajax:successを聞き取り、応答からHTMLを追加します。

私の単純なアプリケーションでは、これにより私のコードはすべてHAML/Coffeescriptに保存され、javascriptテンプレートは使用できないため、この方法が欲しいです。

アプリケーションの複雑さが増すと、この問題は別の文字になる可能性がありますが、それでも有効な質問だと思います。これは、Railsアプリケーション用のAJAXベースのアーキテクチャを実装する悪い方法です(もしそうなら、なぜ、JSONの代わりにHTMLをAJAX呼び出しから返すのが悪い考えですか?)、またはこれを私が引き続き利用しなければならない理由は何ですか?リモート使用している場合

は:-)

答えて

1

ありがとう:真のではなく、HTML要求のJS要求を送信します。

コントローラーメソッドを実行すると、実行を終了したばかりのコントローラーアクションと同じ名前のjs.erbまたはjs.hamlファイルが検索されます。

このファイルでは、コントローラーアクションの実行が完了した後に実行する必要のあるアクションを実行するための 'js'コードを書き込むことができます。

javascriptアセットファイルに関数がある場合は、その関数も呼び出すことができます。

2

あなたのアプローチはかなり正確です。しかし、私は1点を変更します。 remote:trueを使用する代わりに、jQuery ajaxコールを直接使用します。

$(function(){ 
    $('#some_link').click(function() { 
     $.ajax({ 
      // some parameters here 
     }) 
     .done(function(data){ 
      $('div').html(data); 
     }); 
    }); 
});