我在他们的网站上直接使用AlloyUI模式“真实世界示例”:http://alloyui.com/examples/modal/real-world/
使用示例逐字并更改以下行:
visible: true,
到
visible: false,
因此,只有在单击按钮后才会显示模态,而不是在页面加载时,正如人们期望的对话框那样。当我单击“显示模态”按钮时,模态加载但是对话框的主体没有正确地填充它的空间,并且工具栏被拼凑起来。调整大小后,一切都会很好地重新回到原位。
我正在寻找一个干净的解决方案,到目前为止,我认为一个hacky修复可能是加载带有zIndex的模态,将它放在页面主体后面,并通过CSS点击按钮改变z-index(但是这似乎真的很hackish)。我可能还可以在按钮触发modal.show()之后以编程方式调整模式大小,但这会导致布局中的可见跳转,我想避免。
有什么建议吗?我知道AlloyUI有很多隐藏的东西,因为他们的文档很稀疏,或许可见属性不是我应该使用的那个?
答案 0 :(得分:3)
经过一些研究后,我找到了自己问题的答案,这仍然可能是一个hacky修复,但直到有人提出更好的解决方案。
Step 1:
Leave visible: true intact.
Step 2:
Invoke .hide() after setting up the modal
完整的代码。
YUI().use('aui-modal', function(Y) {
var modal = new Y.Modal({
bodyContent: '<div id="dialogBody"><div id="myTab"></div></div>',
centered: true,
headerContent: '<h3>Modal Goodness</h3>',
height: 600,
modal: true,
render: '#modal',
width: 900
}).render();
modal.addToolbar([
{
label: 'Save',
on: {
click: function() {
alert('You clicked save!');
}
}
},
{
label: 'Close',
on: {
click: function() {
modal.hide();
}
}
}
]);
modal.hide();
Y.one('#showModal').on(
'click',
function() {
modal.show();
}
);
});
答案 1 :(得分:0)
我几乎和你一样做了,只是有点不同
modal = new Y.Modal(
{
centered: true,
contentBox: '#contentBox',
destroyOnHide: false,
headerContent: '<h3>Informations to your Orders</h3>',
height: 400,
modal: true,
render: '#modal',
resizable: {
handles: 'b, r'
},
visible: true,
width: 450
}
).hide();
我用hide()替换了.render(),通过单击按钮调用了这行代码:
Y.all('#showModal').on(
'click',
function() {
modal.show();
}
);
无法在YUI API Docs上找到方法或参数来停止自动渲染,因此这似乎是通常的&#39;办法。我认为它可能是属性render,但将其设置为false或删除属性不会对自动初始化行为进行任何更改。