2013-02-23 53 views
0

我正尝试在手风琴中预先打开div。我正在相应的控制器中设置实例变量@expanded_section。我想使用的jQuery的UI手风琴这样的使用再培训局的active参数值在我的CoffeeScript文件中的assets/javascripts文件夹CoffeeScript与ERB错误

$(".sections").accordion({ 
    active: <%[email protected]_section%>, 
    header: "h4", 
    collapsible: true, 
    heightStyle: "content" }).sortable({ 
    axis: "y", 
    handle: "h4", 
    update: -> 
    $.post($(this).data('update'), $(this).sortable('serialize')) 
    }) 

但我收到以下错误:

Error: Parse error on line 60: Unexpected ',' 

(在/home/steve/dev/rails/Sur​​vey/app/assets/javascripts/surveyys.js.coffee.erb)

line 60active: <%[email protected]_section%>,

如果我做一个@expanded_section电话to_i它呈现active:0

但是,当我从控制器打印@expanded_section值到控制台它打印正确的预期值。

请帮忙。

回答

0
assets/

一切都将被处理之前您的控制器上运行。这意味着,@expanded_section不是来自你的控制器,它将来自任何self是当资产被编译,因此,像所有的实例变量,将在第一次访问创建,将是nil。结果是CoffeeScript将看到:

$(".sections").accordion({ 
    active: , 

这是一个语法错误。

,你可以做一个简单的事情是设置在视图的HTML一个全局JavaScript变量:

<script type="text/javascript"> 
    window.expanded_section = <%= @expanded_section %>; 
</script> 

,然后你的资产的脚本可以看看window

$(".sections").accordion({ 
    active: window.expanded_section, 

你可能会希望将其隐藏在自定义名称空间中以避免与现有的window属性发生冲突,但总体结构将保持不变。那小小的window.expanded_section = ...,但如果它是每个页面的一部分,甚至可能会进入您的布局。

+0

如何在haml中执行window.expanded_section? – 2013-02-23 04:47:03

+0

@stevanity:对不起,不知道,不是HAML的家伙。谷歌搜索应该有所帮助。 – 2013-02-23 04:55:56

+0

好吧np :)我用了一个javascript过滤器。无论如何。在我的js文件,我得到'window.expanded_section'就像是:( – 2013-02-23 04:57:53