ExtJSで楽しくRIA業務アプリ開発

株式会社sus4 開発チーム

ExtJS入門6 Ext.Panelクラスについて

2件のコメントがあります

このエントリーを含むはてなブックマークはてなブックマーク - ExtJS入門6 Ext.Panelクラスについて この記事をクリップ!Livedoorクリップ - ExtJS入門6 Ext.Panelクラスについて Yahoo!ブックマークに登録 BuzzurlにブックマークBuzzurlにブックマーク このエントリをつぶやくこのWebページのtweets Share on Tumblr FC2ブックマークへ追加 newsing it! この記事をChoix! Googleブックマークに追加 Bookmark this on Delicious Digg This

今回はExt.Panelクラスについてです。Ext.PanelクラスはExtJSの開発では、ユーザーの目に見える部分を構築する要素になります。
パネルクラスは以下のように継承されています。

Observable
Component
BoxComponent
Container
Panel

APIドキュメントでExt.Panelクラスを開くと、こんな感じで定義されています。

Ext.Panelクラス
パッケージ: Ext
定義ファイル: Panel.js
クラス: Ext.Panel
サブクラス: ButtonGroup, TabPanel, Tip, Window, FieldSet, FormPanel, GridPanel, TreePanel
継承元: Container
xtype: panel

http://extdocs.xenophy.com/?class=Ext.Panel

パネルはContainerのサブクラスでxtypeはpanelとして定義されています。またサブクラスにはTabPanelやGridPanelがあります。
さらにこう書かれています。

パネルは、特定の機能性を持つコンテナと、アプリケーション指向のユーザインタフェースのための完全な構造的基礎となる構造的コンポーネントです。
パネルは、継承元である Ext.Container のプロパティによって、レイアウトで配置することができ、そして子コンポーネントを含むことができます。

パネルクラスはExtJSのUIを含める目に見える部分を構成する単位になります。パネルごとに機能を持たせそれをブラウザ上に配置することで複数の機能を持った画面を構成できます。
またViewportのitemsに指定するように、パネルは他のコンポーネントの中にレイアウトで配置することができ、さらに子のコンポーネントも同じように持つことができる(Ext.PanelがExt.Containerのサブクラス)ということになります。つまりパネルはViewportでやったのと同じようにレイアウトを設定して、さらに細かく画面を分割できるということです。
実際のところパネルクラスで使う機能の多くはその上位クラスであるContainerやComponentで実装されています。いきなりComponentクラス等の上位クラスを使うには、ハードルが高いので、パネルクラスをスタート地点にしてContainer、BocComponentと理解していく方が見通しがよいと思います。

まず簡単なサンプルで実際にパネルを作ってみます。


Ext.onReady(function(){
    var centerPanel = new Ext.Panel({
        id:'centerPanel',
        region:'center',
        title:'Center Panel',
        bodyStyle:'padding:50px;text-align:center;',
        html:'<h1>パネル</h1>',
        margins:'3 3 3 3'
    })

    var viewport = new Ext.Viewport({
        layout:'border',
        items:[
         centerPanel,
         {
          id:'southPanel',
          region:'south',
          xtype:'panel',
          title:'South Panel',
          bodyStyle:'padding:50px;text-align:center;',
          html:'<h1>下パネル</h1>',
          margins:'3 3 3 3'
         }
        ]
    });
});

ここでは2つの作り方でパネルを生成しています。centerPanelでは new Ext.Panelでパネルを作り、Viewportに渡しています。下パネルはオブジェクトリテラルのxtypeでパネルを生成しています。xtypeでpanelをわざわざ指定していますが、xtypeのデフォルトはpanelなので省略しても大丈夫です。この2つの生成の違いはこちらで解説しています。
ExtJS入門5 xtypeを使ってパネルを作る。

次にViewportに2つのパネルを配置して、さらに各パネル内をボーダーレイアウトにしてみます。せっかくなのでxtypeを使って書いていきます。new Ext.Panel()と書き換えても見た目は同じなります。


Ext.onReady(function(){
    new Ext.Viewport({
        id:"viewport",
        layout:'column',
        listeners:{
            resize:function(){
                //画面にフィットさせる
                var left = Ext.getCmp('leftPanel');
                left.setHeight(Ext.getCmp('viewport').getHeight());

                var right = Ext.getCmp('rightPanel');
                right.setHeight(Ext.getCmp('viewport').getHeight());
            }
        },
        items:[ //viewportの子アイテム
            {
                id:'leftPanel',
                title:'Left Panel',
                columnWidth: .5,
                layout:'border',
                items:[  //  左のパネルの子アイテム xtype = panel
                    {
                        id:'leftCenter',
                        title:'左の真ん中',
                        region:'center',
                        html:"左真ん中"
                    },
                    {
                        id:'leftNorth',
                        title:'左の上',
                        region:'north',
                        html:"左真ん上"
                    },
                    {
                        id:'leftSouth',
                        title:'左の下',
                        region:'south',
                        html:"左真ん下"
                    },
                    {
                        id:'leftEast',
                        title:'左の右',
                        region:'east',
                        html:"左真ん右"
                    },
                    {
                        id:'leftWest',
                        title:'左の左',
                        region:'west',
                        html:"左真ん左"
                    }
                ]
            },
            {   //ここからが右のパネル xtype = panel
                id:'rightPanel',
                title:'Right Panel',
                columnWidth: .5,
                layout:'border',
                items:[  //  右のパネルの子アイテ�
                    {
                        id:'rightCenter',
                        title:'右の真ん中',
                        region:'center',
                        html:"右の真ん中"
                    },
                    {
                        id:'rightNorth',
                        title:'右の上',
                        region:'north',
                        html:"右の上"
                    },
                    {
                        id:'rightSouth',
                        title:'右の下',
                        region:'south',
                        html:"右の下"
                    },
                    {
                        id:'rightEast',
                        title:'右の右',
                        region:'east',
                        html:'右の右'
                    },
                    {
                        id:'rightWest',
                        title:'右の左',
                        region:'west',
                        html:'右の左'
                    }
                ]
            }
        ]
    });
});

Viewportの設定と同じようにパネルにもlayoutを設定して、子となるパネル(leftPanel,rightPanel)をitemsに指定しています。ただボーダーレイアウトの中にボーダーレイアウトを入れると各パネルの範囲が小さくなるのであまりおすすめはできませんね。普通はタブ + 複数のボーダーやグリッド + アコーディオンで複数のパネルのように入れ子にしていきます。
Ext.Panelは一番プレーンなパネルを生成します。上のサンプルではhtmlに設定した文字を配置しているだけです。Firebugで要素を見ると、Ext.Panelは

<div class="x-panel-body">〜</div>

を作成するだけです。Ext.Panelクラスのサブクラス、例えばグリッドパネルなどはもっと複雑なDOMを構築します。

Viewportのコンフィグに付いているlistenersコンフィグでは、Viewportのイベントに対応した処理を設定できます。ここではViewportのResizeイベントをキャッチしています。Resizeイベントの処理は、子となるleftPanelとrightPanelのリサイズを行っています。このイベント処理を書かないと左右のパネルの高さがきちんと設定されません。イベントやExt.getCmpについてはまた別の機会に詳しく紹介します。

  • Share/Bookmark


佐竹 裕行

1982年生まれ。滋賀→はこだて→名古屋→大垣→名古屋。
2006年名古屋学芸大学映像メディア学科卒、その後IAMAS卒(Studio2、6期生)。2009年にsus4に入社。学生時代はMax/MSP JitterやGainerばっかり使っていたが、現在社内では主にExtとモバイル開発、動画サービスのバックエンドを担当。知る人ぞ知るアノ鍵の人。

2 Responses to 'ExtJS入門6 Ext.Panelクラスについて'

Subscribe to comments with RSS or TrackBack to 'ExtJS入門6 Ext.Panelクラスについて'.

  1. [...] [...]

    Ext Japan - ブログ

    13 11 月 09 at 3:57 PM

  2. 第3回ExtJS勉強会

    27 11 月 09 at 3:51 PM

コメントを残す

Get Adobe Flash playerPlugin by wpburn.com wordpress themes