在我的Rails7应用中,我有CustomersController
,其中包含show action和相应的show.slim
视图。在这个视图中,我希望有2个标签:
- "数据",文本为"这是数据页面"-用户点击显示后,此选项卡应处于活动状态。
- "客户用户",文本为"这是客户用户列表"。
当用户点击显示网址(客户路径),他应该能够看到数据选项卡作为活动的,并点击"客户用户"后,他/她不应该被重定向,而是停留在页面和文本"这是客户用户列表"应该呈现。我想使用涡轮框架来控制选项卡切换,没有额外的JS需要。我使用tailwindcss。
所以我所做的是:customers/show.slim
:
div.tabs
button.tab-button[data-turbo-frame="customer_data" data-turbo-frame-target="data"] Data
button.tab-button[data-turbo-frame="customer_users" data-turbo-frame-target="users"] Customer Users
= turbo_frame_tag "data" do
h1 Data
p This is data page
= turbo_frame_tag "users" do
h1 Customer Users
p Here is the list of Customer Users
加上一些额外的css:
.tab-button {
@apply inline-block py-2 px-4 border-b-2 font-medium text-sm focus:outline-none transition duration-150 ease-in-out;
}
.tab-button.active {
@apply border-indigo-500 text-gray-900;
}
.tab-button:hover:not(.active) {
@apply border-indigo-500 text-gray-900;
}
.tabs {
@apply border-b border-gray-200 px-4 flex justify-start;
}
相反,我得到了这样的观点:
就像我说的,第一眼我想知道应该做些什么来使它工作?它必须是涡轮框架,因为EOD我将有很少的视图组件。
1条答案
按热度按时间flvlnr441#
Turbo的工作原理是向后端发出请求,所以如果你想在同一个请求中呈现标签内容,你必须使用javascript来隐藏和显示标签。
如果您确实希望使用Turbo,那么您必须改变处理此问题的方式:
1.由于一次只能打开一个标签页,因此您不需要两个turbo帧,而应该只有一个。
customers/show.slim
1.为每个选项卡创建一个控制器操作
app/controllers/customer_tabs_controller.rb
routes.rb
1.为这些动作添加视图模板,其中
turbo_frame
包含选项卡内容。呈现时,框架以前的内容将被此处的内容替换。app/views/customer_tabs/data.html.erb
app/views/customer_tabs/customer_users.html.erb
1.然后,您必须将链接添加到选项卡按钮,以便单击它们将呈现适当的内容。
customers/show.slim
现在,单击选项卡将打开相应的选项卡内容。要在打开页面时自动加载第一个选项卡,您必须使用快速加载框架
customers/show.slim
作为