2012-01-15 68 views
20

在Coffeescript中重写我的站点的前端。我了解如何将点击功能绑定到类。CoffeeScript - 使用JQuery绑定单击事件以动态加载对象

$('.song').click -> 
    //code 

但是,我遇到了动态加载内容的一些问题。我知道在jQuery的解决,这将是使用“开”功能,像这样:

$(document).on('click', '.song', function(){ 
    //code 
}); 

但我这是如何转化为CoffeeScript的不确定。我的印象是,箭头 - >转化为JavaScript中的匿名函数,但如果函数是其中一个参数,它如何工作?我已经尝试了很多不同的语法,但它们都不起作用,谢谢!

回答

15
$(document).on('click', '.song', (-> 
    ### code ### 
)); 

转化为这个JavaScript:

$(document).on('click', '.song', (function() { 
    /* code */ 
})); 

请注意,您可能需要使用=>运营商,而不是->;使用双箭头还将this绑定到事件处理程序(相当于使用jQuery的bind)。

+0

@Epeli,虽然您的编辑也是一种可能性,但这不是我的偏好。根据函数的内容,CS无法找到最终结果,这可以通过明确地加上大括号来解决。我发现CS令人讨厌的含糊之处; '$(document).on'例如返回'on'而不调用它,'do $(document).on'调用它,'$(document).on something'也调用它,'do $(document)一些东西会调用结果。对参数使用明确的大括号使得这种麻烦更少出现错误恕我直言。因此我会编辑回来。随意张贴你自己的 - 我会upvote它。 ;) – Lucero 2012-01-15 22:03:37

+0

罗杰和对不起。编辑看起来相当明显,因为如果代码执行顺序清晰,您很少会看到带括号的CS代码。就像这个微不足道的例子。 – Epeli 2012-01-15 22:15:18

+0

@Epeli,够公平的,这就是我解释自己的原因。在模块化SPA中运行了数千行CS代码,并看到我的开发人员正在努力解决某些解释的行为,因此我决定在组织中要求方法调用的对象,同时我禁止使用“do '。这实际上有助于保持代码质量,特别是在代码维护期间。 – Lucero 2012-01-15 22:19:29

4

JS2Coffee可以用这些类型的问题有所帮助:

http://js2coffee.org/

您需要与js2coffee小心一点,因为它有时蹒跚而相当棘手的JS代码,但它是出奇的准确,它会通常至少让你相当接近。

21

通常,如果没有它们,执行顺序是明确的,那么在CoffeeScript中通常不使用括号。所以这可以写成这样:

$(document).on 'click', '.song', -> 
    ### code ### 

但是,当然执行顺序不明显时总是使用括号。

+0

这应该是**答案! – mlt 2016-11-01 19:16:27

相关问题