2014-09-27 77 views
0

我有下面的代码:转换红宝石+ JavaScript代码的CoffeeScript

$(document).ready(function() { 
    // Cycles the carousel to a particular frame 
     <% (0..6).each_with_index do |i, index| %> 
     $(".slide<%= i%>").click(function(){ 
      $("#myCarousel").carousel(<%= i%>); 
     }); 
     <% end %> 
    }); 

我需要将其转换为咖啡脚本并将其移出外部文件。

1)是否可以调用从这里到外部文件的变量? 2)如何去做?


更新了代码以显示为什么我需要传递变量。

$(document).ready(function() { 
    // Cycles the carousel to a particular frame 
    <% @images.each_with_index do |i, index| %> 
    $(".slide<%= index%>").click(function(){ 
     $("#myCarousel").carousel(<%= index%>); 
    }); 
    <% end %> 
}); 
+0

为什么你想传递任何变量?你根本不需要任何Ruby/ERB。 – 2014-09-27 17:16:40

+0

已经更新了代码。 – 2014-09-28 09:47:59

回答

0

正如亩提到太短你实际上并不需要通过任何变量,你可以直接转换到这CoffeeScript的,像这样:

$(document).ready -> 
    for i in [0..6] 
     $(".slide#{i}").click -> 
      $("#myCarousel").carousel i 
+1

您可能想要使用'do'循环来确保'i'是您期望它在点击处理程序中的内容。 – 2014-09-28 02:34:28

+0

已经更新了代码 – 2014-09-28 17:37:48

0

在我看来,凯尔李约瑟的答案(大部分)是正确的。你可能只是这样做在一个外部文件:

root = exports ? this 

root.foo = {} #namespace 

root.foo.createNCarousels = (n) -> 
    for i in [0..(n - 1)] 
    do (i) -> #If this is confusing, see http://rzrsharp.net/2011/06/27/what-does-coffeescripts-do-do.html 
     $(".slide#{i}").click -> 
     $("#myCarousel").carousel i 
在原始文件

现在包括外部脚本标签,你应该能够这样称呼它:

$(document).ready(function() { 
    // Cycles the carousel to a particular frame 
    document.foo.createNCarousels(<%= @images.length %>); 
}); 

记住我不不了解Ruby,所以Ruby语法可能是错误的,但我希望我的意图清楚。