我在default.ctp布局上使用了几个元素,即:
echo $this->element('messagesDialog');
echo $this->element('manualpDialog');
它们属于我的布局,随时可用。在我的.js上,我将这些元素隐藏在文档中:
$('#dialog-messages').hide();
问题是这些元素(只是带有表格的div等)在页面加载时部分可见,看起来很丑陋和错误。请注意,由于我的元素在布局上,因此它们会在用户看到的任何主页上简要显示。
为了防止这些div显示,我想在需要时以某种方式“创建”它们,然后将它们丢弃。 (我使用jquery)。
以下解决方案(来自How can I make the browser wait to display the page until it's fully loaded?) 我很难使用,因为我的default.ctp非常拥挤的元素和脚本代码和蛋糕的东西都被放在一个div上。
<body>
<div id="msg" style="font-size:largest;">
<!-- you can set whatever style you want on this -->
Loading, please wait...
</div>
<div id="body" style="display:none;">
<!-- everything else -->
</div>
<script type="text/javascript">
$(document).ready(function() {
$('#body').show();
$('#msg').hide();
});
</script>
</body>
我认为解决方案是拥有我的元素,例如
echo $this->element('messagesDialog');
仅在适当的时候(当用户想要查看他的消息时)加载到我的布局,并且 - 如果可能的话 - 被删除以防止在实例化后加载页面时显示为半页。
关于如何实现这一目标的任何想法?
非常感谢!
答案 0 :(得分:1)
如果不需要,则不应加载元素。而是在布局文件中创建一个IF条件,该条件根据控制器名称和操作名称加载元素。如果您使用会话跟踪用户,则还可以将IF基于会话变量。
或者,您可以简单地将元素放入div中,例如:
<div class="hiddenClass" style="display: none;">
<?php echo $this->element('messagesDialog'); ?>
</div>
然后在您的javascript部分中使用以下内容: $(”。hiddenClass')显示();