- 如何更改每个单击选项卡的活动状态
如果你看bootstrap tabs markup http://getbootstrap.com/javascript/#tabs, 它说:
您只需在元素上指定 data-toggle="tab" 或 data-toggle="pill" 即可激活选项卡或药丸导航,而无需编写任何 JavaScript
所以你的标记需要像这样:
/ Nav tabs
%ul.nav.nav-tabs
%li.active
=link_to "Tab1", "#tab1", html_options = { "data-toggle" => "tab" }
%li
=link_to "Tab2", "#tab2", html_options = { "data-toggle" => "tab" }
%li
=link_to "Tab3", "#tab3", html_options = { "data-toggle" => "tab" }
/ Tab panes
.tab-content
.tab-pane.active#tab1
%p Fetch content
.tab-pane#tab2
%ul.nav.nav-pills
%li.active
= link_to 'Overview', "#overview", html_options = { "data-toggle" => "tab"}
%li
= link_to 'Details', "#details", html_options = { "data-toggle" => "tab"}
.tab-content
.tab-pane.active#overview
%p Fetch overview
.tab-pane#details
%p Fetch details
.tab-pane#tab3
%p Fetch content
Note: 您只需在要显示的选项卡上应用活动类。
- 如何ajax加载标签数据
a. 创建您希望 ajax 请求转到的自定义路由,或者您可以只使用 show 操作。
b. 我们需要添加一些数据属性,以便我们知道哪个选项卡被单击。然后我们可以在后端定位它。
/ Nav tabs
%ul.nav.nav-tabs
%li.active
=link_to "Tab1", "#tab1", data: {toggle: "tab", target: "admin", href: "#{your_show_action_path}
%li
=link_to "Tab2", "#tab2", data: {toggle: "tab", target: "member", href: "#{your_show_action_path}
%li
=link_to "Tab3", "#tab3", data: {toggle: "tab", target: "moderator", href: "#{your_show_action_path}
/ Tab panes
.tab-content
.tab-pane.active#tab1
%p // this will be activated by default so you can load default content here
.tab-pane#tab2
%ul.nav.nav-pills
%li.active
= link_to 'Overview', "#overview", html_options = { "data-toggle" => "tab"}
%li
= link_to 'Details', "#details", html_options = { "data-toggle" => "tab"}
.tab-content
.tab-pane.active#overview
%p Fetch overview
.tab-pane#details
%p Fetch details
.tab-pane#tab3
%p Fetch content
C。使用 JS 触发 ajax 请求
$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
var target = $(this).data("target");
var href = $(this).data("href");
$.ajax({
type: "GET",
url: href,
data: {tab: target},
dataType: "script"
});
})
d.现在,您可以根据 ajax 请求发送的选项卡变量加载选项卡内容。
def show
@data_tab = User.admin
@data_tab = User.member if params[:tab] == "member"
@data_tab = User.moderator if params[:tab] == "moderator"
end
#show.js.erb
$(".tab-pane.active").html("your content here");
我想给每个选项卡窗格一个部分,如何动态更改控制器中的部分名称?我应该使用不同的实例变量吗?
如果内容相同,那么您可以使用相同的部分和相同的实例变量,但如果不同,那么您可以检查目标变量值的参数,然后相应地在 js.erb 中渲染您的部分
Update:
1:如何动态更改 .tab-pane.active,因为我将成员和主持人设置为空部分,这样当我单击“成员”选项卡时,该部分将填充ajax数据并向该窗格添加“活动”类?
您不需要在此处添加活动类,因为如果您的应用程序中有 bootstrap js,那么它会自动在您单击的选项卡上设置活动类,结账bootstrap docs http://getbootstrap.com/javascript/#tabs
2:js.erb如何响应不同的实例变量并渲染不同的partials?
当您单击选项卡时,我们会获取 data-target 属性并将其作为 ajax 请求中的参数发送,然后在 js.erb 文件中检查这些参数值以呈现部分。
3.如何防止之前点击的选项卡发送ajax请求?
不确定你在这里的意思,但之前单击的选项卡不会也不应该发送 ajax 请求。如果您快速单击 2 个选项卡,那么发送 2 个 ajax 请求是正常的,因为最后它总是会显示活动选项卡。