0

Rails 3 で、次のコードがあるとします。

コントローラ

...
format.js # create.js.erb
...

create.js.erb

$('#element').html("new content");

フォームを見る

...
button_to 'Create', element, remote: true

create.js.erbファイル内のJSがどのように呼び出されるのだろうか。私の推測では、それは JS コードを返し、一部の Rails ヘルパーはそれを受け取ったときにそれを呼び出します。これは正しいですか、それとも他の種類の魔法がここで行われていますか?

4

1 に答える 1

1

編集

短い答え:基本的に、あなたの仮定は正しいです。JSコードが返され、それが実行されます。

少し長い答え: ただし、その背後にはいくつかの魔法があります。ボタンをクリックすると、作成 URL に対して JSON 要求が発行されますが、代わりに「js」の形式が要求されます。

コントローラーは、予期される形式が 'js' であることを認識し、createアクションを実行した後、その形式のテンプレートをレンダリングします -- create.js.erb.

Rails は、:remote => trueオプションにより、このカスタム JSON 要求を実行する必要があることを認識しています。data-remote=trueリンク要素に属性を追加します。

次に、rails.js( link ) で指定されたハンドラが、この data-attribute を持つすべての要素にアタッチされ、残りの処理が行われます。

以下の元の回答

Rails はUnobtrusive Javascriptと呼ばれる手法を使用して、.js ファイルで指定したハンドラーをそれぞれのイベントにアタッチします。

詳細については、これ(より具体的にはパート 3) とこの記事を参照してください。

または、最も楽しいルートをたどってrails.jsファイルを見て、すべての魔法がどのように機能するかを確認することもできます:)

于 2012-08-31T12:21:02.873 に答える