如何在不滚动回顶部的情况下更新我在 Drupal 8 中的视图?
How to update my View in Drupal 8 without scrolling back to the top?
我正在尝试刷新我在 Drupal 8 中的视图,而无需使用以下代码重新加载页面:
(function ($, Drupal) {
'use strict';
setInterval(function() {
$('.view-message-activity-stream-timeline-public').trigger('RefreshView');
}, 10000);
})(jQuery, Drupal);
有效。
我的问题:
每次刷新视图时,该页面都会回到视图顶部。
页面刷新还有一个问题。当我点击首页底部的"Afficher plus" link时,第2页出现在第1页下方,但刷新后自动关闭
您的问题是由于 ViewAjaxController
在每次 loads/reloads 视图时将 ScrollTopCommand
添加到 ajax 响应引起的。你可以在方法 ajaxView
:
中找到涉及的行
if (isset($pager_element)) {
$response->addCommand(new ScrollTopCommand(".js-view-dom-id-$dom_id"));
$view->displayHandlers->get($display_id)->setOption('pager_element', $pager_element);
}
希望可以通过实施 hook_ajax_render_alter
来更改发送到客户端的命令数据,只需删除 viewsScrollTop
命令,使其不再被触发:
function <MODULE>_ajax_render_alter(array &$data) {
$view_name = '<view_name>';
$view_dom_id = '<view_dom_id>';
$selector = '.js-view-dom-id-' . $view_dom_id;
foreach ($data as $key => $value) {
if ($value['command'] === 'viewsScrollTop' && $value['selector'] === $selector) {
unset ($data[$key]);
break;
}
}
}
如果需要匹配view_dom_id
和view_name
,可以在$data数组中搜索settings
命令,例如。 $cmd['settings']['views']['ajaxViews']
的结构如下所示,请注意数组键正是从 views_dom_id 构建的:
[ajaxViews] => Array
(
[views_dom_id:<views_dom_id>] => Array
(
[view_name] => <view_name>
[view_display_id] => <view_display_id>
[view_dom_id] => <views_dom_id>
)
)
我正在尝试刷新我在 Drupal 8 中的视图,而无需使用以下代码重新加载页面:
(function ($, Drupal) {
'use strict';
setInterval(function() {
$('.view-message-activity-stream-timeline-public').trigger('RefreshView');
}, 10000);
})(jQuery, Drupal);
有效。
我的问题:
每次刷新视图时,该页面都会回到视图顶部。
页面刷新还有一个问题。当我点击首页底部的"Afficher plus" link时,第2页出现在第1页下方,但刷新后自动关闭
您的问题是由于 ViewAjaxController
在每次 loads/reloads 视图时将 ScrollTopCommand
添加到 ajax 响应引起的。你可以在方法 ajaxView
:
if (isset($pager_element)) {
$response->addCommand(new ScrollTopCommand(".js-view-dom-id-$dom_id"));
$view->displayHandlers->get($display_id)->setOption('pager_element', $pager_element);
}
希望可以通过实施 hook_ajax_render_alter
来更改发送到客户端的命令数据,只需删除 viewsScrollTop
命令,使其不再被触发:
function <MODULE>_ajax_render_alter(array &$data) {
$view_name = '<view_name>';
$view_dom_id = '<view_dom_id>';
$selector = '.js-view-dom-id-' . $view_dom_id;
foreach ($data as $key => $value) {
if ($value['command'] === 'viewsScrollTop' && $value['selector'] === $selector) {
unset ($data[$key]);
break;
}
}
}
如果需要匹配view_dom_id
和view_name
,可以在$data数组中搜索settings
命令,例如。 $cmd['settings']['views']['ajaxViews']
的结构如下所示,请注意数组键正是从 views_dom_id 构建的:
[ajaxViews] => Array
(
[views_dom_id:<views_dom_id>] => Array
(
[view_name] => <view_name>
[view_display_id] => <view_display_id>
[view_dom_id] => <views_dom_id>
)
)