新手问题 [求助] 如何在 view 的模板文件中引用 assets 中的一个 coffee 文件

lilijreey · 2016年08月10日 · 最后由 lilijreey 回复于 2016年08月12日 · 1563 次阅读

有个文件是这样的

//= require action_cable
//= require_self
//= require_tree ./channels

(function() {
  this.App || (this.App = {});

  App.cable = ActionCable.createConsumer();
    console.log("connect webSocket");

}).call(this);

我只想某一个特点页面才包含上面的文件而不是所有的。如何实现呢?

app/views/layouts/application.html.erb 给 body 增加和 controller_name 有关的 class,例如:

<body data-controller-name="<%= controller_name %>">`

application.coffee 里面实现判断

if $('body').data('controller-name') in ['topics', 'replies']
  // 初始化 topics  JS 代码

if $('body').data('controller-name') in ['pages']
  // 初始化 pages  JS 代码

最后把 JS 都打包到一块儿加载。

如果这个 js 是大部分用户用不到但是又比较大的,可以不放到 application.js 里,直接在需要的页面里单独引用

<%= javascript_include_tag 'pages' %>

并且向 config 中加入

Rails.application.config.assets.precompile += %w( pages.js)

不过原则上还是建议使用 华顺 的方案,另外如果使用了 turbolinks 需要注意重载问题。

#1 楼 @huacnlee #2 楼 @IChou 感谢,我是这么做的都加载,不过记载的时候只加载函数的定义不执行函数,在加载特定页面的时候,内嵌函数的调用。哈哈。不是很好但是能用

需要 登录 后方可回复, 如果你还没有账号请 注册新账号