2014-11-01 69 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 %> 
相关问题