2011-12-06 19 views
2

ページがロードされた後に(AJAXを使用して)呼び出され、コントローラがそれを呼び出すコントローラに応じてページ上の異なるものを更新できる汎用コントローラを作成します。coffeescript内にcoffeescriptを部分的にレンダリングできません

この目的は、ユーザーのカスタム要素を表示しながら、より良いページおよびフラグメントのキャッシュを可能にすることです。

私のフレームワークは、次のようになります。

controllers/general_ajax_controller.rb 
views/general_ajax/on_page_load.js.coffee 
       ./_update_some_stuff.js.coffee 

コントローラでon_page_loadアクションがロードするためにパーシャルとビューがパーシャルをレンダリングしますどの考え出すのロジックを処理します。

<%= render "update_some_stuff" %> 

部分をレンダリングする必要があります。on_page_load.js.coffee鑑み

私はこのコード(簡略化)を有します。代わりに、私はこのエラーを取得する:私はon_page_loadビューの拡張子を変更した場合

ActionView::Template::Error (SyntaxError: Reserved word "function" on line 2): 
    app/views/general_ajax/on_page_load.js.coffee:1:in `_app_views_general_ajax_on_page_load_js_coffee___2304196970850216490_70321203283120' 

私は

(コーヒーで、コンパイル済みのJSをサポートしていません)のCoffeeScriptをビューに含める前にコンパイルされていることを考えます.js.erbに、次にになります。になります。 (奇妙なことに、動作する前にサーバーを再起動する必要がありますか?)

これはcoffeescriptの問題だと思いますか?

サイドディスカッションとして、ダイナミックなスクリプティングに関する私のアプローチについてどう思いますか?

答えて

2

_update_some_stuff.js.coffeeが解釈され、Javascriptに変換されるためです。 on_page_load.js.coffeeに挿入すると、Coffee-Scriptファイル(この場合はfunctionキーワード)内でバニラのJavascriptコードが互換性がないため、エラーが発生します。

+0

はい、これが問題の原因です。しかし 'render 'の代わりに何をお勧めしますか?update_some_stuff" '?どのように正しくcoffeeScriptの部分を使用するには? – Cristian

+0

私は分かりません。私はこれをまだ必要としていない。私はrespond_toを使ってjavascriptをレンダリングしました。たぶんそこから何らかの条件に基づいてファイルをレンダリングしたり、Railsのパーシャルを使用したりすることができます。 –

+0

私のアイデアは、ファイルをそれぞれ別々のものに分けて、それぞれが独自の機能を持っていて、必要かどうかに応じて個別に読み込むことができるようにすることでした。時折、一度に多くのファイルをロードする必要があるので、レンダリング呼び出しはここでは機能しません。 – Cristian

5

解決策の1つは、生の解析されたjavascriptをビューに埋め込むことです。

バックティック(coffeescriptには生のjavascriptを指定)と、raw()を使用してレンダリングされた部分のHTMLエスケープを元に戻すことに注意してください。

` 
<%= raw(render("update_some_stuff")) %> 
` 
+0

ありがとうございます!それは非常にセクシーではないが、それは動作します:) –

関連する問題