两个建议,第一个是hacky,第二个很棒。
1.清单+布局
为需要不同 JS 组合的视图创建一个新的 JS 清单文件,从新布局调用该清单文件,并从呈现这些视图的控制器操作调用新布局。
在您的示例中:
应用程序/资产/javascripts/resource.js.coffee
// Requires
//= require_whatever_js_files_your_resource_page_needs_here
// Custom JS below
...
应用程序/视图/布局/resource.html.erb
...
<%# Within your <head> tag %>
<%= javascript_include_tag "resource" %>
...
应用程序/控制器/resources_controller.rb
class ResourceController < ApplicationController
# filters, default layout, other actions, etc.
...
# Your action that needs only the resource JS,
# and therefore the resource layout
def action_that_only_uses_resource_js
@some_objects = SomeObjects.all
render layout: 'resource' # <- This is the important part
end
显然,这种方法不能很好地扩展,因为它不够灵活,也就是说,你不能随意组合你的 JS,而且毫无疑问会需要。这使我们将您的 JS 分解为...
2. RequireJs 模块
使用这个 gem将RequireJs集成到 Rails 中。您将获得所需的模块化并防止发生冲突。RequireJs 采用了AMD 模式,我相信这正是您正在寻找的。