0

私はこのカップルに出くわしました。したがって、Rails 3では、アセットパイプラインの導入により、JavaScriptをビューからより適切に分離します。ただし、インスタンス変数をコントローラーからjavascriptに転送する場合はどうなりますか?唯一の解決策は、ビューにjavascriptを埋め込むことのようです。これを回避する方法はありますか?ダイナミックな要素をビューから切り離すことは不可能なように感じます。これは、GoogleビジュアライゼーションAPIを使用したときに時々発生します。APIにフィードするために、常に大きなデータをプッシュする必要があります。

ありがとう

4

3 に答える 3

2

主なオプションは3つあります。

  1. 埋め込まれたJavaScript

    あなたが提案したように<script>、コンテンツが動的に決定されるページにタグを埋め込むことができます。

  2. DOM

    <textarea>内容が何らかのデータ(通常はJSON)である非表示にするのが一般的な方法です。ページの読み込み時に、DOMを使用して要素のvalue属性にアクセスできます。

  3. 個別のHTTPリクエスト

    サーバーにJSONデータを提供させることができます。これは、XMLHttpRequestまたはその他の手段で要求します。

于 2012-09-02T03:04:16.757 に答える
2

それを行うための1つのクリーンな方法は、Gongemです。これは特に「Rails変数をjsに取得する」ためのものです

他のいくつかのオプションについては、このrailscastsエピソードを参照してください(またはASCIIcastsトランスクリプトを読んでください)。

于 2012-09-02T03:18:16.740 に答える
1

簡単だ!

index.html.erbに対して次のビューを持つコントローラーがあるとします。

#GET /index.html
def index
  @some_data = {:foo => [:bar0, :bar1]}
end


私たちのビュー(index.html.erb)では、最初にデータをHTMLに埋め込みます

<%= javascript_include_tag "index" %> 
<div id="home_page">

<!-- Pass members to javascript -->
<div id="self" data-some_data='<%= @some_data.to_json %>'></div>    

</div>


最後に、jQueryを使用していると仮定すると、index.jsのデータに簡単にアクセスできます。

$(document).ready(function() {
  some_data = $("#self").data("some_data");
  alert(some_data.foo[0]);              //Says "bar0"
}




注意:返されたデータを単なる文字列ではなくオブジェクトのように使用する魔法の能力があるため、JSON.parseを使用する必要があります。例:

$(document).ready(function() {
      //This will fail
      some_data = JSON.parse($("#self").data("some_data"));
      alert(some_data.foo[0]);              //Says "bar0"
    }

ただし、JSON.parseの使用は機能しません。JSON.parseから返される情報は必ずしも文字列である必要はなく、この場合はjavascriptオブジェクトでした。jQueryのデータ関数は、文字列を適切なjavascriptオブジェクトに暗黙的に変換しようとします。JSON文字列を含むデータ属性の場合、データ属性内の文字列は「javascriptオブジェクト」に変換されます。

の魔法の振る舞いが気に入らない場合は、の代わりに$.data使用できますJSON.parse($("#self").attr("data-some_data"))$("#self").data("some_data")

于 2013-09-20T22:37:14.157 に答える