将jQuery转换为Coffeescript

时间:2014-07-11 18:54:39

标签: jquery coffeescript

我之前发过一个令人困惑的问题。长话短说,我有一点jQuery工作接近我想要的方式,但我不能为我的生活让它在CoffeeScript中工作。

当我在CS中尝试不同的方式时,“on search”事件会在加载页面后立即触发。我不能像在jQuery中那样只是附加到dataTable。

我确信这是简单而愚蠢的事。

以下是代码:

$(document).ready(function() {
    $('#customers').dataTable( {
        "sPaginationType": "bootstrap",
        "aaSorting": [],
        "ordering": false
    } );

    $('#customers')
            .on( 'search.dt',  function () { $('.nested_indent').hide(); } )

} );

最新的CS版本在这里(每次加载页面时都会跳转。)

jQuery ->
    $('#customers').dataTable(
        "sPaginationType": "bootstrap"
        "aaSorting": []
        "ordering": false
    ).$('#customers').on( 'search.dt',  
         $('.nested_indent').hide() )

2 个答案:

答案 0 :(得分:1)

JavaScript版本有两个不同之处:

).$('#customers').on( 'search.dt',  
     $('.nested_indent').hide() )

第一个是.之前的$('#customers')。这会尝试将$用作方法而不是全局方法。您需要删除.并插入带有匹配缩进的换行符。

第二个是function周围的$('.nested_indent').hide()丢失了。与->一样,您必须至少包含jQuery ->来定义一个。

)  # 1) separate statements with line break

$('#customers').on( 'search.dt', ->  # 2) wrap `hide` in a `function`
     $('.nested_indent').hide() )

第二个区别是你看到的原因:

  

[...]“on search”事件会在页面加载后立即触发。

如果没有->,则会立即调用.hide()语句,并将其return值传递给.on(),因此它实际上并未绑定到该事件

答案 1 :(得分:0)

问题不在于事件是在页面加载时触发的,而是您传递的$('.nested_indent').hide()正在页面加载上运行,因为您没有在CS中的函数中传递它你的JavaScript。

你想要的是:

jQuery ->
    $('#customers').dataTable(
        "sPaginationType": "bootstrap"
        "aaSorting": []
        "ordering": false
    );  

    $('#customers').on 'search.dt', ->
         $('.nested_indent').hide()