Rendering and Visibility Considerations

You may have noticed while working through the examples in this chapter that you usually see the layout occur as the page loads; for example, you might see ordinary text HTML representing some of the layout content, and then all of a sudden it magically transforms into this great-looking layout. While not totally unacceptable, you will probably not want to see the rendering take place in many situations.

A common technique for working around the situation is to initially set the body of the page to be hidden, and then when the page finishes loading, make it visible all at one time. Accomplishing this technique is quite simple, and you merely have to provide a style (or class) indicating that the body of the page should be hidden, like so: <body style="visibility:hidden;"> should do the trick. Just remember to add the corresponding call to make it visible at the desired time. Assuming you've made the entire body hidden, adding a dojo.style(dojo.body( ), "visibility", "visible") to a dojo.addOnLoad displays the page's content. Any callback could be used in place of page load if for some reason you wanted to delay showing the page until some arbitrary event occurred (like an asynchronous callback that provides data for a custom widget, perhaps).

Tip

Recall that the difference between the CSS styles of visibility and display has to do with taking up space on the screen. In general, nodes styled with visibility:hidden are hidden from display but still take up space; nodes styled with display:none would not be visible and would take up no space—resulting in a noticeable shift of content when the display is changed to display:block.

One caveat that should be noted, however, is that layout containers do not always respond well when they are initially created within a hidden container. If you find that your layout containers are not visible when they should be, you may need to manually call their resize( ) method to force them to render properly. Historically, this issue has especially been the case when displaying a layout container within a dijit.Dialog.

Warning

Layout dijits do not always render properly if they are created in context that does not immediately make them visible. Almost all of the time, you can simply call the layout container's resize( ) method to render it.

Get Dojo: The Definitive Guide now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.