2014-11-01 92 views
0

我是網絡開發新手,所以這個問題我覺得很簡單,但對我很困難。哪裏把JavaScript代碼放在RoR Web應用程序中?

在我的網頁我有1000+線JS的,我可以在3種把它分解:

1.Where我定義全局變量,並要求後端的初始數據:

var charts_data = #{@object.charts_data}; 

var max_height = #{@object.max}; 
var min_height = #{@object.min}; 

var param_from = #{params[:f].nil? ? -1 : params[:f]}; 
var param_to = #{params[:t].nil? ? -1 : params[:t]}; 

2.Where我定義一些支持功能(助手),而不是與當前頁面,即,對於數組:

function clone(obj) { 
    if (null == obj || "object" != typeof obj) return obj; 
    var copy = obj.constructor(); 
    for (var attr in obj) { 
    if (obj.hasOwnProperty(attr)) copy[attr] = clone(obj[attr]); 
    } 
    return copy; 
} 

3.Functions與當前頁的基礎上,網頁元素使用的選擇器,即:

$('#range-from, #range-to').keypress(function (e) { 
    //if the letter is not digit then display error and don't type anything 
    if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) { 
    return false; 
    } 
}); 

難道你們能幫我清除js中的視圖並正確地分割它並放入另一個文件嗎?

回答

1

我不是一個RoR親自己,但可能會像這樣開始的......

這一切似乎是鑑於有關所以在我眼裏它屬於爲特定的輔助模塊的軌道。

您的第一個塊似乎不是頁面相關的,所以它可能會在ApplicationHelper中找到空間。 您的第二塊(與特定頁面相關)完全適合其頁面助手。 第三個我將存儲在與頁面相關的js文件(在'assets' - >'javascripts'下找到)。

..可能有更好的解決方案,但是像這樣你應該很好地整理出來。

1

我建議你使用angularJS(JS框架)來組織你的JS。我在我的RoR項目中使用它。

查看此頁面出來:http://angular-rails.com/

+0

雖然角是一個很好的框架,我不認爲這確實解決了OP的質疑「其中把javascript代碼」 – 2014-11-01 18:33:22

+0

我認爲它。 AngularJS的教程告訴你如何組織你的JS,並把它的每個部分,指令,控制器放在哪裏...... – raulchopi 2014-11-02 16:36:54

1

Rails中管理JavaScript是相當偏好的問題。假設一個項目只取決於jQuery,那麼我會在三個層次中對代碼進行排序。

  1. 應用程序佈局,其中您的後端因變量必須定義;
  2. 一些常見的.js文件在控制器之間存儲通用代碼;
  3. 只針對一個/幾個視圖的代碼,因此不需要始終加載。

在Rails中,每個Javascript代碼都會去app/assets/javascripts(至少從版本3.2開始)。樹可能看起來像:

. 
| application.js 
| common.js 
| users 
|  \ new.js 
|  \ index.js 
| ... 

application.js只定義了應用程序依賴庫,例如要求jQuerycommon.js包含您的應用的通用代碼,並且users/new.js包含僅針對該特定視圖的代碼。要使用這種代碼存儲方法,需要告訴Rails必須爲特定視圖加載特定文件。它可以這樣做:

# application layout: 
<body> 
... 
... 
<%= yield :additional_javasript %> 
</body> 

# users/new.html.erb: 
<% content_for :additional_javasript do %> 
    ... 
<% end %> 
相關問題