2011-07-12 4 views
0

私は多くのパラメータとすべてのパラメータ名を与える関数を持つモデルを持っています。今、私は*メソッドは、クラスメソッド(* DEF self.parameter_names *)であるので、私は、オブジェクトを必要としない* parameter_namesこのRuby on Rails 3のグローバルJavaScriptファイルの作成方法Railsからいくつかのコンテンツを取得する<%= ... %>

function bar() { 
    <% Model.parameter_names.each do |name| 
     parameters.push("<%= name %>"); 
    <% end %> 
    // do something with them 
} 

のように、この機能を使用してのJavascriptファイルグローバルをしたいのですが。 これは可能ですか?

答えて

2

することができます。あなたはそれについて忘れることができます

<script src="your-js-file.js"></script> 

まず第一に、あなたはjavascriptのファイルを考えている場合は、次のように含まれています。決してRoRはそのファイルに対して何もしていません。

コントローラレスポンスでjavascriptをRoRと混在させることができます.jsファイルはRoRによって読み込まれ、その後Rubyの式が評価され、ブラウザに返されます。あなたはあなたのような何かのためのコントローラからのjs応答を見てみる場合は実際には、こう書いています

function bar() { 
    parameters.push("abc"); 
    parameters.push("def"); 
    parameters.push("ghi"); 
    parameters.push("jkl"); 
} 

Javascriptがクライアント側の技術です:

function bar() { 
    <% Model.parameter_names.each do |name| 
     parameters.push("<%= name %>"); 
    <% end %> 
    // do something with them 
} 

あなたのような何かを見るでしょう。サーバーサイドコードを追加する唯一の方法は、実際にサーバーサイドコードでjsファイルを生成することです。これはおそらくあなたのベストショットです。

コントローラー:

<script src="<%= jsfile_controllername_path %>"></script> 

そしてroutes.rb

に対応するルートを追加します。

def jsfile 
    @variable = "hello, world!" 
    respond_to do |format| 
     format.js 
    end 
end 

jsfile.js.erb

function bar() { 
    alert('<%= @variable %>'); 
} 

は、このようなJavaScriptのファイルをインクルード

2

レイアウトの先頭にJavascript配列を作成し、それをグローバルJSファイルで参照します。

レイアウト例(HAML):

%html 
    %head 
    :javascript 
     var parameter_names_array = ['#{Model.parameter_names.join(', ')}']; 

グローバルJSファイルソートの

function bar() { 
    // do something with "parameter_names_array" 
} 
関連する問題