我正在尝试用手风琴预打开一个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 60
是active: <%=@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 = ...
,但如果它是每一页的一部分,甚至可能会出现在你的布局中。