0

我正在尝试在手风琴中预先打开一个 div。我@expanded_section在相应的控制器中设置一个实例变量。我正在尝试在 jQuery-UI 手风琴的参数中使用该值,就像在文件夹active中的咖啡脚本文件上使用 erbassets/javascripts

$( ".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/steve/dev/rails/Sur​​vey/app/assets/javascripts/surveyys.js.coffee.erb)

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

如果我to_i调用@expanded_section它会呈现active:0.

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

请帮忙。

4

1 回答 1

0

在您的控制器运行之前assets/,将处理下面的所有内容。这意味着它不会来自您的控制器,它将来自编译资产时的任何内容,因此它与所有实例变量一样,将在首次访问时创建并且将是. 结果是 CoffeeScript 会看到:@expanded_sectionselfnil

$( ".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 = ...一部分,那么它甚至可能会出现在您的布局中。

于 2013-02-23T04:30:35.993 回答