2017-08-11 90 views
1

我有一个单独的控制器,有2个动作/视图和一个通道,所有这些都被脚手架搭建,几乎都使用默认项目。如何将JavaScript添加到Rails 5中的单个视图?

当我加载任一视图,我可以看到该渠道订阅正确。

我需要订阅只发生在其中一个视图上。目前,资产管道似乎将所有内容编译成单个js文件,然后将该js文件提供给每个页面。

当我脚手架我的频道时,它创建了一些名为channel.js的javascript。我如何仅包含特定操作/视图的channel.js?

+1

[资产管道:使用JavaScript文件只有一个控制器]的可能的复制(https://stackoverflow.com/questions/19899542/asset-pipeline - 使用JavaScript的档案换仅一控制器) – Gerry

回答

0

资产管道确实将所有内容编译成单个JS文件,因此没有内置的方式来限制某些JavaScript文件执行到特定操作

但是有一种方法可以解决这个问题。首先,这个辅助方法添加到application_helper.rb

# application_helper.rb 
def body_classes(*args) 
    return (@body_classes || []).join(" ") if args.empty? 
    @body_classes ||= [] 
    @body_classes += args.map { |klass| klass.to_s.gsub("_", "-") } 
    @body_classes.uniq! 
    nil 
end 

而且在布局中使用它:

<!-- application.html.erb --> 
<body class="<%= body_classes %>"> 
    <!-- ... --> 
</body> 

有了这个,你可以在你的模板指定某些体类,被添加到<body>标签:

<!-- your_action.html.erb --> 
<%= body_classes :my_custom, :action_class %> 
<h1>Your action</h1> 
<!-- ... --> 

上面的代码将添加下列类来<body>

<body class="my-custom action-class"> 

最后,你可以在你的JS代码测试这些体类:

// your_action.js 
if($("body").hasClass("my-custom")) { 
    // run code specific to pages with the 'my-custom' class 
} 
0

尝试进入您的控制器保存方法你想拥有的javascript中内置的观点写这里面:在以下文件

def 'the view you want to effect' # This could be "index" for your index.html.erb view 
    @java = "channel.js" 
end 

然后,找到你的<%= javascript_include_tag %>

意见>布局> application.html.erb

这包括到您的标记加载您要与以前的过程中的任何观点不同的JavaScript文件。 (与CSS尝试这里面你的CSS包括标签了。)

<%= javascript_include_tag '#{@java}' %> 
相关问题