我最近一直在考虑 CoffeeScript,我刚刚按照本指南将我一直在从事的 Rails 项目升级到 Rails 3.2.8(从没有资产管道的 Rails 3.0.9)。
我不得不做一些骇人听闻的事情才能让事情正常工作。我正在测试一个新页面“/pages/game”,因此它在资产目录中有一些示例 CoffeeScript。
(app/assets/javascripts/page.js.coffee)
class MyObject
constructor: ->
hello: -> alert 'hello world of coffeescript!'
a = new MyObject
a.hello()
然后我在我的生产环境中添加了一行:(config/environments/production.rb)
config.assets.precompile += %w( pages.js ) # this is needed to precompile coffee script files... it is difficult to understand how manifest files work...
然后输入
$ bundle exec rake assets:precompile
编译page.js 唯一的问题是我用CoffeeScript 创建的类并没有像我预期的那样工作。因此,我在 FireFox 中打开了我的开发者控制台并尝试手动实例化该类,但它的行为就像没有名为 MyClass 的对象一样。
那么我哪里出错了?假设我可以手动实例化我用 CoffeeScript 编写的类是不是冒昧的?我将 pages.js 添加到预编译数组的骇人听闻的方法不合适吗?如果您是 CoffeeScript 专业人士,您将如何测试您的课程等?
更新: 我的部分问题是咖啡脚本类中固有的“可变隐私”。这种隐私可以在标准 javascript 中实现,并且在涉足咖啡脚本之前应该理解。 http://benalman.com/news/2010/11/immediately-invoked-function-expression/
也就是说,咖啡脚本类需要附加到窗口对象以使其全局可访问,如下所示:
已更正
class MyObject
constructor: ->
hello: -> alert 'hello world of coffeescript!'
window.MyObject = MyObject;
一旦在这个庄园中发布了类(通过将其作为全局附加到窗口),它可以通过实例化a = new MyObject()
,然后正常调用其函数以向屏幕发出警报a.hello()