【发布时间】:2022-09-30 13:02:43
【问题描述】:
需要为分页按钮禁用 Turbolinks。
简单地添加data: { turbo: false } 似乎不起作用。
<% will_paginate data: { turbo: false } %>
标签: turbolinks will-paginate disable ruby-on-rails-7
需要为分页按钮禁用 Turbolinks。
简单地添加data: { turbo: false } 似乎不起作用。
<% will_paginate data: { turbo: false } %>
标签: turbolinks will-paginate disable ruby-on-rails-7
<% will_paginate data: { turbo: false } %> 不起作用的原因是它将data-turbo 属性放在外部容器 div 上,而不是放在单个按钮链接上。
虽然还没有为will_paginate 分页链接禁用turbolinks 的快捷方式(至少我找不到任何),但可以通过如下自定义will_paginate 渲染器来实现所需的结果。
首先,创建自定义渲染器:config/initializers/custom_paginate_renderer.rb。注意li 标签上的data-turbo="false" 属性。这会成功的。
require 'will_paginate/view_helpers/action_view'
require 'will_paginate/view_helpers/link_renderer'
class CustomPaginateRenderer < WillPaginate::ActionView::LinkRenderer
def container_attributes
{ class: 'pagination' }
end
def html_container(html)
child = tag(:ul, html, container_attributes)
tag(:nav, child)
end
def page_number(page)
if page == current_page
'<li class="page-item active" data-turbo="false">' + link(page, page, rel: rel_value(page),class: 'page-link') + '</li>'
else
'<li class="page-item" data-turbo="false">' + link(page, page, rel: rel_value(page),class: 'page-link') + '</li>'
end
end
def previous_page
num = @collection.current_page > 1 && @collection.current_page - 1
previous_or_next_page(num, '<span aria-hidden="true">«</span>')
end
def next_page
num = @collection.current_page < total_pages && @collection.current_page + 1
previous_or_next_page(num, '<span aria-hidden="true">»</span>')
end
def previous_or_next_page(page, text)
if page
'<li class="page-item" data-turbo="false">' + link(text, page, class: 'page-link') + '</li>'
else
'<li class="page-item disabled" data-turbo="false">' + link(text, page, class: 'page-link') + '</li>'
end
end
end
接下来,将其作为will_paginate 的渲染器传递:app/helpers/application_helper.rb。
def will_paginate(coll_or_options = nil, options = {})
if coll_or_options.is_a? Hash
options = coll_or_options
coll_or_options = nil
end
unless options[:renderer]
options = options.merge renderer: CustomPaginateRenderer
end
super *[coll_or_options, options].compact
end
最后,不要忘记重新启动服务器以使配置更改生效。
如果其他人知道更好的方法,我会很高兴听到它!
参考:
【讨论】: