Clear Up
SharpKit Reference

Card Class

This layout manages multiple child Components, each fitted to the Container, where only a single child Component can be visible at any given time. This layout style is most commonly used for wizards, tab implementations, etc. This class is intended to be extended or created via the layout:'card' Ext.container.Container.layout config, and should generally not need to be created directly via the new keyword.

The CardLayout's focal method is setActiveItem. Since only one panel is displayed at a time, the only way to move from one Component to the next is by calling setActiveItem, passing the next panel to display (or its id or index). The layout itself does not provide a user interface for handling this navigation, so that functionality must be provided by the developer.

To change the active card of a container, call the setActiveItem method of its layout:

var p = Ext.create('Ext.panel.Panel', {
            layout: 'card',
            items: [
            { html: 'Card 1' },
            { html: 'Card 2' }
            renderTo: Ext.getBody()

In the following example, a simplistic wizard setup is demonstrated. A button bar is added to the footer of the containing panel to provide navigation buttons. The buttons will be handled by a common navigation routine. Note that other uses of a CardLayout (like a tab control) would require a completely different implementation. For serious implementations, a better approach would be to extend CardLayout to provide the custom functionality needed.

var navigate = function(panel, direction){
            // This routine could contain business logic required to manage the navigation steps.
            // It would call setActiveItem as needed, manage navigation button state, handle any
            // branching logic that might be required, handle alternate actions like cancellation
            // or finalization, etc.  A complete wizard implementation could get pretty
            // sophisticated depending on the complexity required, and should probably be
            // done as a subclass of CardLayout in a real-world implementation.
            var layout = panel.getLayout();
            Ext.create('Ext.panel.Panel', {
            title: 'Example Wizard',
            width: 300,
            height: 200,
            layout: 'card',
            bodyStyle: 'padding:15px',
            defaults: {
            // applied to each contained panel
            border: false
            // just an example of one possible navigation scheme, using buttons
            bbar: [
            id: 'move-prev',
            text: 'Back',
            handler: function(btn) {
            navigate(btn.up("panel"), "prev");
            disabled: true
            '->', // greedy spacer so that the buttons are aligned to each side
            id: 'move-next',
            text: 'Next',
            handler: function(btn) {
            navigate(btn.up("panel"), "next");
            // the panels (or "cards") within the layout
            items: [{
            id: 'card-0',
            html: '<h1>Welcome to the Wizard!</h1><p>Step 1 of 3</p>'
            id: 'card-1',
            html: '<p>Step 2 of 3</p>'
            id: 'card-2',
            html: '<h1>Congratulations!</h1><p>Step 3 of 3 - Complete</p>'
            renderTo: Ext.getBody()

Namespace: Ext.layout.container

Base Interfaces



Name Description
deferredRender True to render each contained item at the time it becomes active, false to render all contained items as soon as the layout is rendered (defaults to false). If there is a significant amount of content or a lot of heavy controls being rendered into panels that are not displayed by default, setting this to true might improve performance. Defaults to: false


Name Description
getActiveItem() Return the active (visible) component in the layout.
getNext() Return the active (visible) component in the layout to the next card
getPrev() Return the active (visible) component in the layout to the previous card
next() Sets the active (visible) component in the layout to the next card
prev() Sets the active (visible) component in the layout to the previous card
setActiveItem(object) Makes the given card active.
var card1 = Ext.create('Ext.panel.Panel', {itemId: 'card-1'});
            var card2 = Ext.create('Ext.panel.Panel', {itemId: 'card-2'});
            var panel = Ext.create('Ext.panel.Panel', {
            layout: 'card',
            activeItem: 0,
            items: [card1, card2]
            // These are all equivalent
© Copyright 2005-2011 SharpKit. All rights reserved.