如何使用Rails资产管道进行每页javascript

tel*_*ent 14 javascript ruby-on-rails asset-pipeline

我理解,出于性能原因,最好让资产管道连接并缩小我的所有javascript,并将每个页面请求发送到整个批次.这很公平

但是,我的一堆javascript就像是将特定行为绑定到特定的页面元素之类的东西

$('button').click(function(e) { $('input.sel').val(this.name); }
Run Code Online (Sandbox Code Playgroud)

如果我知道这个代码只在那个页面上执行,我会感觉更舒服 - 而不是在其他页面上可能巧合地使用相同ID或匹配相同选择器的元素人们如何处理这个?

我宁愿不把所有这些东西都放在元素内联中,只是因为当它长度超过两行时,保持javascript正确缩进到.html.erb文件中是比它需要更多的工作

Ine*_*neu 17

这是我做的(基于一些stackoverflow答案):

application_helper.rb

def body_page_name
  [controller_name.classify.pluralize, action_name.classify].join
end
Run Code Online (Sandbox Code Playgroud)

application.html.haml

  %body{data: {page: body_page_name}}
Run Code Online (Sandbox Code Playgroud)

的application.js

$(function() {
  var page = $("body").data("page");
  if("object" === typeof window[page])
    window[page].init();
});
Run Code Online (Sandbox Code Playgroud)

在适当的js文件中有一个名为ControllerAction的对象:

tickets.js

var TicketsShow = new function() {
  var self = this;

  self.init = function() {
    // code which may call other functions in self
  };
};
Run Code Online (Sandbox Code Playgroud)

可能有更好的方法,但这对我有用