哪里把javascript代码放在RoR网络应用程序中?

时间:2014-11-01 14:58:12

标签: javascript ruby-on-rails

我是网络开发的新手,所以我觉得这个问题对很多人都很简单,但对我来说很难。

在我的页面上,我有1000多行js,我可以将它分为3种类型:

1.我在哪里定义全局变量并向后端询问初始数据:

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.我在哪里定义了一些支持函数(帮助器),与当前页面无关,即与数组有关:

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.与当前页面相关的功能,使用基于页面元素的选择器,即:

$('#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中清除我的视图并正确拆分并放入其他文件吗?

3 个答案:

答案 0 :(得分:1)

我自己不是RoR职业选手,但可能会开始这样......

这一切看起来都与视图有关,所以在我看来它属于给定帮助模块的轨道。

您的第一个块似乎与页面无关,因此可能会在ApplicationHelper中找到空间。 您的第二个块(与特定页面相关)将完全适合其页面助手。 第三个我将存储在与页面相关的js-File中(在'assets'下找到 - &gt;'javascripts')。

..也许有更好的解决方案,但是像这样你应该很好地解决。

答案 1 :(得分:1)

我建议你使用angularJS(JS框架)来组织你的JS。我在我的RoR项目中使用它。

查看此页面:http://angular-rails.com/

答案 2 :(得分:1)

在Rails中管理javascript是一个偏好问题。假设一个项目仅依赖jQuery,那么我会在三个级别之间对代码进行排序。

  1. 应用程序布局,其中必须定义后端因变量;
  2. 一些常见的.js文件,用于跨控制器存储公共代码;
  3. 仅针对一个/几个视图的代码,因此不需要始终加载。
  4. 在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 %>