0

アコーディオンでdivを事前に開こうとしています。@expanded_section対応するコントローラーにインスタンス変数を設定しています。そして、フォルダー内activeのcoffeescriptファイルでerbを使用して、このようにjQuery-UIアコーディオンのパラメーターでその値を使用しようとしていますassets/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_sectionrenderが表示されactive:0ます。

しかし@expanded_section、コントローラーからコンソールに値を出力すると、適切な期待値が出力されます。

助けてください。

4

1 に答える 1

0

以下はすべて、コントローラーが実行されるassets/に処理されます。これは、あなたのコントローラーからではなく、アセットがコンパイルされているときに何でも来るので、すべてのインスタンス変数と同様に、最初のアクセス時に作成され、 . その結果、CoffeeScript には次のように表示されます。@expanded_sectionselfnil

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

これは構文エラーです。

簡単にできることの 1 つは、ビューの 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 に答える