1

Rails 3.2 アプリには、DOM 要素のグラフをレンダリングする jquery 関数があります。

#assets/scripts.coffee.erb
$(document).ready ->
  $("#chart_container").do_some_stuff

#view
<div id="chart_container"></div>

このビューを ajax 化して、ユーザーがグラフに表示されるデータを切り替えられるようにしています。問題は、コーヒー スクリプトが ajax 応答を介してトリガーされないことです。

ビューのいくつかのタグ内に関数を配置すると、すべて正常に機能しますが、これはあまり「良い」解決策ではありません。

あるいは、ajax 応答によってレンダリングされた view.js.erb から関数を呼び出すことができることを知っています。何かのようなもの

#view.js.erb
$('#chart_container')['myFunction']();

しかし、私の JavaScript の知識は限られているため、coffeescript 関数の名前を正しく付ける方法がわかりません。

ドキュメントの準備ができたときに関数をトリガーする必要があります。しかし、ajax 応答を介して手動で関数を呼び出せるようにする必要もあります。これをどのように設定すればよいですか?

(これは非常に基本的なJavaScriptの質問であり、あまりよく聞かれていないと思いますが、ガイダンスに感謝します).

4

1 に答える 1

3

最初にコードを関数にラップできます

#assets/scripts.coffee.erb
$(document).ready ->
  $(document).chart_action()

$.fn.chart_action = ->
  $("#chart_container").do_some_stuff

次に、ajax 応答テンプレートでこの関数を呼び出します

#view.js.erb
$(document).chart_action()

バージョンアップ

@muistooshort の提案に感謝します。使用量が少ない場合でも、jQuery を汚染するのではなく、カスタム名前空間を使用することをお勧めします。

したがって、上記をリファクタリングします

# Custom functions for this app
class App
  chart_action: -> 
    $("#chart_container").do_some_stuff

# Normal code for initializing page
app = new App
$(document).ready ->
  app.char_action()

# view.js.erb
app.chart_action()
于 2013-07-02T16:35:34.553 に答える