我有一个 Ruby on Rails 应用程序,其中一部分包含 Twitter Bootstrap 选项卡,用户可以使用 Simple Form 和 Cocoon 添加该部分的多个实例。
为了使选项卡链接正常工作,我必须为部分的每个新子项中的选项卡设置唯一名称(以便单击特定选项卡会激活其自己的唯一内容,而不是在前一个子部分出现在同一页面上)。
我在这里看到将代码添加到 Cocoon 以实现此目标:https ://github.com/nathanvda/cocoon/pull/100 。
在那次讨论中,有迹象表明新功能已在 Cocoon Simple Form Demo 项目中进行了试用。但是在尝试新功能的过程中所做的任何更改都没有在那里提交(至少据我所知)。
查看 github 上的提交,似乎已经在 Cocoon javascript 代码中通过将 '[contentNode]' 添加到 'insertionNode.trigger' 调用(https://github.com/woto/cocoon/提交/cb206d501e4749a05e0c1d868911da159c8200c1):
insertionNode.trigger('cocoon:before-insert', [contentNode]);
我对这些东西不是很老练。
那么,如何为嵌套子项的每个新实例实现/获取唯一标识符?
任何帮助或方向将不胜感激。
这是我的应用程序中的代码供参考:
-# /app/controllers/parent_records_controller.rb
class ParentRecordsController < ApplicationController
# GET /parent_records/1/edit
def edit
@parent_record = ParentRecord.find(params[:id])
@parent_record.items.build
end
end
-#/app/views/parent_records/_form.html.haml
.row-fluid
=simple_form_for(@parent_record, :wrapper => :inline4, :html => {:class => 'form-inline', :multipart => true}) do |f|
.row-fluid
= f.simple_fields_for :items do |item|
=render :partial => '/parent_records/form_partials/item', :locals => { :f => item }
.row
.span2.offset9
= link_to_add_association 'Add Another Item', f, :items, :class => 'btn btn-primary', :partial => 'parent_records/form_partials/item'
= f.button :submit , :class => 'btn btn-success'
-#/app/views/parent_records/form_partials/_item --- --- TAB HREF 名称是我需要唯一标识符的地方 --- ---
.nested-fields
.well.span
.tabbable
%ul.nav.nav-tabs
%li.active
%a{"data-toggle" => "tab", :href => "#tab1"} Item Info
%li
%a{"data-toggle" => "tab", :href => "#tab2"} Pictures
.tab-content
#tab1.tab-pane.active
= f.input :short_name,:label => 'Item Title'
= f.input :brand,:label => 'Brand'
= f.input :description,:label => 'Description'
#tab2.tab-pane
= f.simple_fields_for :pictures do |picture|
=render :partial => '/parent_record/form_partials/picture', :locals => { :f => picture }
.span2.offset9
= link_to_add_association 'Add A Picture', f, :pictures, :class => 'btn btn-primary', :partial => 'parent_records/form_partials/picture'
.span2
= link_to_remove_association "Remove Item", f, :class => 'btn btn-danger'
-#/app/views/parent_records/form_partials/_picture
.nested-fields
.well.span
= f.input :image, :label => 'Seclect Image to be Uploaded'
= f.input :rank, :label => 'Image Rank for this Item'
.row
.span2
= link_to_remove_association "Remove Picture", f, :class => 'btn btn-danger'
编辑/后续问题:
下面 Nathan 的回答适用于添加唯一标识符,但添加唯一标识符破坏了 Bootstrap 的选项卡功能。鉴于我的印象是 Bootstrap javascript 可能仅在文档最初加载时评估选项卡和链接之间的对应关系,这似乎是有道理的。
谁能指出我如何让 Bootstrap javascript 重新初始化并找到新的 id 和链接?
编辑2
事实证明(我认为)是 div.well.span
分离.nested-fields
并且.tabbable
阻止了 Bootstrap 能够初始化新命名的href
和选项卡 ID。疯狂的旅程,但最终令人满意。