所以在app/assets/javascript/faye.js.coffee.erb
我有以下内容:
$('#room_tag').bind('blur', () ->
alert('Hey!')
)
其中的所有其他代码如:sendmessage('room', 'message')
工作正常。我可以复制并粘贴从上面的块生成的代码并将其粘贴到Chrome中,它可以正常工作。我假设这是因为,它是rails还是coffeescript?,无论是其中之一,都将整个文件包装在:
(function() {
// your generated code here
}).call(this);
还有可能让我有办法访问那里定义的方法吗?是否可以在那里定义一个方法而不将其分配给变量?
答案 0 :(得分:29)
1)在文档准备好之前,很可能你的.bind
调用过早执行,因此它没有做任何事情。将它包裹在$(document).ready
这样的呼叫中
$(document).ready ->
$('#room_tag').bind 'blur', ->
alert 'Hey!'
实际上有一个可爱的快捷方式,因为jQuery的默认$
函数是$(document).ready
的别名,你可以这样做:
$ ->
$('#room_tag').bind 'blur', ->
alert 'Hey!'
2)coffeescript将所有内容包装在一个自动执行的函数定义中。
3)如果要在coffeescript中创建全局函数,请将其显式指定为全局窗口对象的属性
window.myFunc = (arg1) ->
alert arg1
2)& 3)在CoffeeScript docs
中有清楚的解释