我在javascript文件夹中有一个coffescript文件并且在这个文件夹里面,rails会自动将它添加到所有视图中,但我希望该文件只在一个视图中使用,因为如果它被添加到其他视图中你可以改变它们。
答案 0 :(得分:1)
这是一个相对常见的问题,但是您可以执行一些操作来仅在特定页面上呈现该javascript。
使用模块模式,您需要将大部分javascript包装在匿名闭包中(如coffeescript中):
do ->
# ... all vars and functions are in this scope only
# still maintains access to all globals
return
要执行的闭包内的代码可以包装在像这样的对象中:
(($) ->
myObj = myFunc: (param) ->
# do stuff ...
return
$('selector').click ->
myObj.myFunc()
return
return
) jQuery
因此,您要执行的代码将包装在对象中的函数内,然后您可以在触发事件时调用该对象。如果要在单个视图中运行的代码仅依赖于用户交互(如点击,悬停和其他事件),则可以执行以下操作。
在rails中,您可以将控制器和操作类添加到body标签中。通过这样做,您可以使用javascript来定位正文的css类,然后根据当前视图的类执行或不执行某些代码。看起来有点像这样:
在application.html.erb
中<body class = "<%= controller_name %> <%= action_name %>"
假设您要为new
控制器的articles
操作执行一些coffeescript,然后在您的coffeescript文件中执行:
if $('body').hasClass('articles') and $('body').hasClass('new')
# do stuff for the articles#new
else
你可以查看paloma gem,但我不认为宝石会被积极维护。
我希望有所帮助!