将coffeescript添加到给定视图中

时间:2017-02-11 16:54:12

标签: ruby-on-rails coffeescript

我在javascript文件夹中有一个coffescript文件并且在这个文件夹里面,rails会自动将它添加到所有视图中,但我希望该文件只在一个视图中使用,因为如果它被添加到其他视图中你可以改变它们。

1 个答案:

答案 0 :(得分:1)

这是一个相对常见的问题,但是您可以执行一些操作来仅在特定页面上呈现该javascript。

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

因此,您要执行的代码将包装在对象中的函数内,然后您可以在触发事件时调用该对象。如果要在单个视图中运行的代码仅依赖于用户交互(如点击,悬停和其他事件),则可以执行以下操作。

Body css classes

在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

你可以查看paloma gem,但我不认为宝石会被积极维护。

我希望有所帮助!