Home   Single Page

Create Components Manually

In addition to describe what components to create in ZUML pages, developers could create them manually. All component classes are concrete. You create them directly[15] with their constructors.

<window id="main">
    <button label="Add Item">    
        <attribute name="onClick">        
    new Label("Added at "+new Date()).setParent(main);    
    new Separator().setParent(main);    
        </attribute>        
    </button>    
    <separator bar="true"/>    
</window>

When a component is created manually, it won't be added to any page automatically. In other words, it doesn't appear at user's browser. To add it to a page, you could invoke the setParent, appendChild or insertBefore method to assign a parent to it, and it becomes a part of a page if the parent is a part of a page.

There is no destroy or close method for components[16]. A component is removed from the browser as soon as it is detached from the page. It is shown as soon as it is attached to the page.

<window id="main">
    <zscript>Component detached = null;</zscript>    
    <button id="btn" label="Detach">    
        <attribute name="onClick">        
    if(detached != null) {    
        detached.setParent(main);        
        detached = null;        
        btn.label = "Detach";        
    } else {    
        (detached = target).setParent(null);        
        btn.label = "Attach";        
    }    
        </attribute>        
    </button>    
    <separator bar="true"/>    
    <label id="target" value="You see this if it is attached."/>    
</window>

In the above example, you could use the setVisible method to have a similar effect. However, setVisible(false) doesn't remove the component from the browser. It just makes a component (and all its children) invisible.

After a component is detached from a page, the memory it occupies is release by JVM's garbage collector if the application has no reference to it.



[15] To make things simpler, the factory design pattern is not used.

[16] The concept is similar to W3C DOM. On the other hand, Windows API required developers to manage the lifecycle.