0

公開済みおよび未公開のストーリーを表示するためのjQueryUIタブを備えたRails3アプリがあります。erbテンプレートは次のとおりです。

<ul class="tabs">
  <li><strong>Filter:</strong></li>
  <li class="active"><%= link_to 'Published', '#published_stories' %></li>
  <li><%= link_to 'Unpublished', '#unpublished_stories' %></li>
</ul>

<div id="published_stories">
  <% @published_stories.each do |published_story| %>
    <article class="story_article">
      <h2><%= published_story.title %></h2>

      <ul>
        <li><%= link_to "Update", edit_story_path(published_story) %></li>
        <li><%= link_to "Destroy", story_path(published_story), method: "delete", confirm: "Are you sure?" %></li>
      </ul>

      <%= time_tag published_story.published_at, pubdate: true %>
      <%= markdown published_story.content.truncate(400, separator: " ") %>
    </article>

    <%= paginate @published_stories %>
  <% end %>
</div>

<div id="unpublished_stories">
  # As above to show unpublished stories
</div>

li要素のクリックイベントを聞いて、アクティブなタブのスタイルを設定しています。jquery.cookie.jsここで、ページを更新した後、以前に選択したタブが持続するように使用したいと思います。これが私がすでに持っているものです:

jQuery ->
  $(".tab_container").tabs(
    active : ($.cookie('saved_tab') || 0),
      activate : -> (event ui)
      newIndex = ui.newTab.parent().children().index(ui.newTab)
      $.cookie('saved_tab', newIndex, { expires: 1 })
  )

  $(".tabs li").click ->
    $(this).addClass("active").siblings().removeClass("active")

私が受け取るエラーメッセージは、変数uiが見つからないというものです。どんな助けでも大歓迎です。

4

1 に答える 1

0

あなたの CoffeeScript にはいくつかの点が見られます。

まず、関数は次のように定義されます。

(arg, arg, ...) -> function_body

と言いたいので、CoffeeScriptでactivate: (event, ui) -> ...。Your-> (event ui)は次のように解釈されます。

-> event(ui)

それはあまり意味がありません。

第二に、CoffeeScript のインデントには細心の注意を払う必要があります。インデントはコードの構造を定義するためのほとんどすべてなので、細心の注意を払う必要があります。あなたがこれを言うとき:

  activate : -> (event ui)
  newIndex = ui.newTab.parent().children().index(ui.newTab)
  $.cookie('saved_tab', newIndex, { expires: 1 })

CoffeeScript はnewIndex代入や$.cookie呼び出しをactivateメソッドの一部として認識しません。CoffeeScript は 3 つの別個の無関係なステートメントを認識します。

上記を適用すると、次のようになります。

$(".tab_container").tabs(
  active : ($.cookie('saved_tab') || 0),
  activate : (event, ui) ->
    newIndex = ui.newTab.parent().children().index(ui.newTab)
    $.cookie('saved_tab', newIndex, { expires: 1 })
)
于 2013-03-01T18:05:37.510 に答える