三个jquery coffeescript功能相互冲突

时间:2012-09-23 20:50:51

标签: jquery ruby-on-rails-3 coffeescript asset-pipeline

我是coffeescript / javascript的相对业余爱好者,但我无法弄清楚如何构建它以便三个不同的函数(两个Select2函数和一个函数来加载Best in Place)将在Rails 3应用程序中同时工作。在应用程序运行时,我在资产管道文件中有以下代码,它肯定会被加载并转换为javascript:

jQuery ->
    $('#foo').select2()
        placeholder: "Choose an option.",
        allowClear: true
    $('#bar').select2()
        placeholder: "Choose an option.",
        allowClear: true
    $('.best_in_place').best_in_place()

但是当我把这三个函数放在一起时,它们都不起作用。当我只跑一个时,比如:

jQuery ->
    $('#foo').select2()
        placeholder: "Choose a diagnosis.",
        allowClear: true

Presto,这个功能运作得很好。我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

我怀疑您的代码根本不起作用,您可能希望在尝试运行该代码时观看JavaScript控制台。

此:

$('#foo').select2()
    placeholder: "Choose an option.",
    allowClear: true

与此JavaScript相同:

$('#foo').select2()({
    placeholder: "Choose an option.",
    allowClear: true
});

但你几乎肯定想要这个JavaScript:

$('#foo').select2({
    placeholder: "Choose an option.",
    allowClear: true
});

为此,你的CoffeeScript看起来像这样:

$('#foo').select2
    placeholder: "Choose an option."
    allowClear: true

或者像这样:

$('#foo').select2(
    placeholder: "Choose an option."
    allowClear: true
)

这个CoffeeScript:

$('#foo').select2()
    placeholder: "Choose an option.",
    allowClear: true
$('#bar').select2()
    placeholder: "Choose an option.",
    allowClear: true
$('.best_in_place').best_in_place()

应该成功执行$('#foo').select2(),然后触发TypeError,因为select2()没有返回一个函数,但你试图像一个函数那样调用它。然后,$('#bar').select2()$('.best_in_place').best_in_place()甚至不会运行。