蛋糕如何防止页面加载时显示ctp元素

时间:2013-02-13 01:32:45

标签: javascript jquery css cakephp

我在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'); 

仅在适当的时候(当用户想要查看他的消息时)加载到我的布局,并且 - 如果可能的话 - 被删除以防止在实例化后加载页面时显示为半页。

关于如何实现这一目标的任何想法?

非常感谢!

1 个答案:

答案 0 :(得分:1)

如果不需要,则不应加载元素。而是在布局文件中创建一个IF条件,该条件根据控制器名称和操作名称加载元素。如果您使用会话跟踪用户,则还可以将IF基于会话变量。

或者,您可以简单地将元素放入div中,例如:

<div class="hiddenClass" style="display: none;">
<?php echo $this->element('messagesDialog'); ?>
</div>

然后在您的javascript部分中使用以下内容:     $(”。hiddenClass')显示();