经过进一步研究,由 Aguardientico 的回答提示,我发现可以使用 Sass 来执行此操作,如此处所述但是我不想重建 ExtJS CSS,因此我添加了一些代码在运行时执行此操作,如下所示:
var body = Ext.getBody();
// Remove the x-body cls from the body element
body.removeCls("x-body");
// Add x-body cls to any existing top-level ExtJs divs
body.select('>div').each(function(el) {
if (el.hasCls("x-border-box")) {
el.addCls("x-body");
}
});
body.on("DOMNodeInserted", function(e, node) {
// Add x-body cls to top-level ExtJs divs as they are created
if (node.parentNode === body.dom) {
if (Ext.fly(node).hasCls("x-border-box")) {
Ext.fly(node).addCls("x-body");
}
}
});
这个想法是从body元素中删除x-body并将其添加回由 ExtJS 创建的任何 div 作为 body 的直接子级。因为 ExtJS 会根据需要添加新的 div,例如对于选择列表,所以还需要注意它们是使用DOMNodeInserted事件创建的。
我在我的应用程序的launch
处理程序中调用此代码,但它也可以在Ext.onReady
处理程序的开头。
编辑:
我的 ExtJS 应用程序位于一个呈现给 body 元素的容器中,如下所示:
Ext.create("Ext.container.Container", {
renderTo: Ext.getBody(),
...
});
但是如果您渲染到另一个 DIV,您还需要像这样显式地将x-body类添加到您的自定义容器中:
Ext.create("Ext.container.Container", {
renderTo: "SomeOtherDiv",
cls: "x-body",
...
});