带有ERB错误的CoffeeScript



我正在尝试用手风琴预打开一个div。我正在相应的控制器中设置一个实例变量@expanded_section。我正试图在jQueryUI手风琴的active参数中使用这个值,就像在assets/javascripts文件夹中的coffeescript文件中使用erb一样

$( ".sections" ).accordion({
  active: <%=@expanded_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/stev/dev/rails/Survey/app/assets/javascripts/surveyys.js.coffee.erb中)

line 60active: <%=@expanded_section%>,

如果我在@expanded_section上执行to_i调用,它将呈现active:0

但是,当我从控制器向控制台打印@expanded_section的值时,它会打印出正确的期望值。

请帮忙。

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 = ...,但如果它是每一页的一部分,甚至可能会出现在你的布局中。

最新更新