Set of CoffeeScript/JavaScript classes and methods available to rest of Rails app

隐身守侯 提交于 2019-11-30 05:35:43

问题


I'm using Rails 3.2.9. When I add CoffeeScript code to a .js.coffee file in the /app/assets/javascripts directory, I get the resulting JavaScript in all of my webpages. The problem is all the JavaScript is wrapped in:

(function() {
  // my code
}).call(this);

So any methods I define are not visible in any other CoffeeScript code I write in other files. What's the proper way to write a set of reusable CoffeeScript classes and methods with Rails?


回答1:


The simplest thing to do is to namespace all your classes. If your application is called "app" then in your initialization code before anything else happens:

// Set up the namespace.
window.app = { }

and then in all your .coffee files:

class app.Pancakes
    #...

Then you'd have a global namespace and you'd reference everything through that namespace:

pancakes = new app.Pancakes

Similarly for simple functions:

app.where_is = (pancakes, house) -> ...

# And elsewhere...
x = app.where_is(...)

There are various ways of setting up and partially hiding the namespace but they're all variations on the above and simple namespacing plays nicely with the Rails asset pipeline.




回答2:


Also, you can define classes within the coffeescript files like this:

class this.Person
  constructor: (attr = {}) ->
    ...

In that way, the definitions are attached to the global namespace.



来源:https://stackoverflow.com/questions/13392670/set-of-coffeescript-javascript-classes-and-methods-available-to-rest-of-rails-ap

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!