在你的代码中,outerBox
是一个新的 DOM 元素,它被设置为 self
的主体部分。因为你将整个 outerBox
作为 self.setBody(outerBox)
的参数,这样会覆盖原来的 vlParent
,从而导致 vlParent
不再显示。
要解决这个问题,你可以将 vlParent
和 outerBox
都添加到同一个容器中,而不是让其中一个覆盖另一个。以下是一些可能的修改方案:
修改方案一:使用一个父容器
- 创建一个新的容器,比如叫做
container
,然后将vlParent
和outerBox
添加到这个容器中。 - 将这个新创建的容器设置为
self.setBody()
的内容。
示例代码如下:
else if ('0BJECTS' == init.type) {
let self = new Fieldset(init.useLang ? lang(init.title) : init.title);
let me = this;
var vlParent = new VLayout().setVerticalAlign('top');
// 创建外部容器
const container = document.createElement('div');
// 将 vlParent 加入外部容器
container.appendChild(vlParent);
// 如果需要,也可以继续处理 outerOperator...
if (window.isOuterOperator != null && window.isOuterOperator != undefined && window.isOuterOperator == true) {
if (init.code === 'loan') {
if (canl("data clearance:customerinfo:overdue info")) {
config.layout.addMember(self);
} else {
config.layout.addMember(self);
}
}
}
for (var i = 0, N = init.child.length; i < N; i++) {
var initObject = init.child[i];
var vl = this.initlayout(initObject.child, initObject.path, editable);
vl.setCSSProperty("paddingBottom", "5px");
if (N > 0 && i >= 1) {
vl.setCSSProperty("borderTop", "2px solid #E3E3E3");
vl.setCSSProperty("paddingTop", "10px");
}
if (initObject.type === 'OBJECTS_OUT_COLLECTION') {
me.customerOutCollection.layout.addMember(vl);
me.customerOutCollection.count++;
} else {
vlParent.addMember(vl); // 添加到 vlParent
}
}
// 现在创建 outerBox
if (!document.getElementById('outerBox')) {
const outerBox = document.createElement('div');
outerBox.id = 'outerBox';
Object.assign(outerBox.style, {
border: '2px solid #000',
padding: '19px',
borderRadius: '5px',
width: '300px'
});
const tabsContainer = document.createElement('div');
Object.assign(tabsContainer.style, {
display: 'flex',
marginBottom: '19px'
});
const tabs = [
{ name: '逾期', content: '逾期内容' },
{ name: '未逾期', content: '未逾期内容' }
];
const contentContainer = document.createElement('div');
Object.assign(contentContainer.style, {
border: '1px solid #000',
padding: '19px'
});
const switchTab = (tab, content) => {
tabsContainer.querySelectorAll('.tab').forEach(t => t.classList.remove('active-tab'));
tab.classList.add('active-tab');
contentContainer.textContent = content;
};
tabs.forEach(({ name, content }) => {
const tab = document.createElement('div');
tab.textContent = name;
tab.classList.add('tab');
tab.addEventListener('click', () => switchTab(tab, content));
tabsContainer.appendChild(tab);
});
switchTab(tabsContainer.querySelector('.tab'), tabs[0].content);
outerBox.appendChild(tabsContainer);
outerBox.appendChild(contentContainer);
// 将 outerBox 添加到外部容器中
container.appendChild(outerBox);
// 将最终的 container 设置为 self 的主体
self.setBody(container);
const style = document.createElement('style');
style.innerHTML = `
.tab {
padding: 10px;
cursor: pointer;
border: 1px solid #000;
margin-right: 5px;
color: #000;
background-color: #fff;
}
.active-tab {
background-color: #000;
color: #fff;
}
`;
document.head.appendChild(style);
}
}
修改方案二:直接添加
另一种方式是在设置主体之前,将两个元素(即 vlParent
和 outerBox
)都加入到同一 DOM 树上,但这种方法通常不如第一种清晰,因为可能使得后续维护变得困难。
这两种方法都能确保同时显示两个组件,根据实际情况选择合适的方法。希望这对你有帮助!
内容由零声教学AI助手提供,问题来源于学员提问