我正在使用 ExtJs 并尝试更改默认滚动条的外观(用于网格面板)。
我尝试使用 jScrollPane,但它根本不适用于 ExtJs。
有什么方法可以改变 ExtJS 中滚动条的默认外观。我不会实现类似于 jScrollPane 的外观
谢谢!
我正在使用 ExtJs 并尝试更改默认滚动条的外观(用于网格面板)。
我尝试使用 jScrollPane,但它根本不适用于 ExtJs。
有什么方法可以改变 ExtJS 中滚动条的默认外观。我不会实现类似于 jScrollPane 的外观
谢谢!
我在寻找在 extjs 4.0.7 网格上实现 jScrollPane 时偶然发现了这篇文章
我找不到其他合适的东西,现在我有这种可怕的骇人听闻的方法:
将此应用于您的网格配置
scroll: false
这就是你网格的 viewModel
style: {
overflow: 'auto',
'overflow-x': 'hidden'
}
以便关闭内部滚动。
将此功能应用于扩展 Ext.grid.Panel 的网格
reapplyScrollbar: function () {
var items = $('#' + this.id + ' .x-grid-view');
var broken = $('#' + this.id + ' .jScrollPaneContainer:not(:first-child)');
var unbroken = $('#' + this.id + ' .jScrollPaneContainer:first-child');
console.log('unbroken count=' + unbroken.length);
console.log('removing ' + broken.length + ' broken containers');
broken.remove();
// grid resized so scroller must be removed
if (items.parent().is('.jScrollPaneContainer') && items[0].parentNode.clientHeight != items[0].clientHeight) {
console.log('moving el up to grid body');
var container = items.parent();
var gridBody = items.parent().parent();
gridBody.append(items);
container.remove();
if (items[0].parentNode.clientHeight != items[0].clientHeight || items[0].parentNode.clientWidth != items[0].clientWidth) {
items[0].style.height = items[0].parentNode.clientHeight + 'px';
items[0].style.width = items[0].parentNode.clientWidth + 'px';
console.log('moved el and reset height & width');
}
} else if (items.length > 0 && items[0].clientHeight > 0 && unbroken.length == 0) {
if (items[0].parentNode.clientHeight != items[0].clientHeight) {
items[0].style.height = items[0].parentNode.clientHeight + 'px';
items[0].style.width = items[0].parentNode.clientWidth + 'px';
console.log('reset height & width');
}
console.log('applying scroll');
items.jScrollPane();
items[0].style.top = "";
}
}
一般的想法是布局被调用了太多次,以至于无法知道内部发生了什么,所以我们将检查网格视图的条件。如果网格视图与其容器的高度不同,则 jScrollPane 需要重新应用(并删除旧的)。在内部发生了一些事情,这意味着jScrollPane
s 成为孤立的,所以我们删除了孤立的。
当添加和删除商店记录时,我也在调用reapplyScrollbar
.
当然,尽管这可行,但它非常讨厌。最终我会通过改变渲染的标记来做更深层次的事情。
我设法将 jscrollpane 与 extJs GridPanel 一起使用。
在网格面板的渲染侦听器中,我放了
$(function(){
$('.x-grid3-scroller').jScrollPane();
});