0

我有一个带有一些 jQuery UI 选项卡的 Rails 3 应用程序来显示已发布和未发布的故事。这是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 元素上的 click 事件来设置活动选项卡的样式。现在我想使用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) -> ...。你-> (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 会看到三个独立且不相关的语句。

应用上述给我们:

$(".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 回答