javascript - 如何使用 Rails Assets 管道执行每页 javascript

标签 javascript ruby-on-rails asset-pipeline

我明白,出于性能原因,最好让 Assets 管道连接并缩小我所有的 javascript,并在每次页面请求时发送全部内容。这很公平

但是,我的一堆 javascript 是将特定行为绑定(bind)到特定页面元素之类的东西——比如

$('button').click(function(e) { $('input.sel').val(this.name); }

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

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

最佳答案

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

application_helper.rb

def body_page_name
  [controller_name.classify.pluralize, action_name.classify].join
end

应用程序.html.haml

  %body{data: {page: body_page_name}}

应用程序.js

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

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

门票.js

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

  self.init = function() {
    // code which may call other functions in self
  };
};

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

关于javascript - 如何使用 Rails Assets 管道执行每页 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8976430/

相关文章:

ruby-on-rails - 在 Rails 中正确存储 "enumeration"模型

ruby-on-rails - 使用载波将一张图像上传到多个存储位置

ruby-on-rails - 如何在ActiveRecord中为ruby设置非null约束?

jquery - iCheck 复选框不显示

ruby-on-rails-3.1 - 在Rails Assets 管道中是否保留SCSS变量?

javascript - 使用 jQuery 遍历 DIV

javascript - iPhone/iPod Touch mailto 链接破坏了 JavaScript 计时器

ruby-on-rails - 使用 Passenger/Capistrano 部署到 Nginx 服务器后图像不显示

JavaScript 仅适用于在浏览器调试器中设置的断点

javascript - 如何使 'clickable hand' 出现在 HTML 文档中?