Ext JS の味見 - 5

「前回のフォームパネルにバリデーションを追加してみる。」
Ext JS のフォームの強力な一面としてバリデーションがある。簡単なの設定だけで、これだけのチェックとエラーメッセージの表示ができる。

Ext JS を使わずに、入力用のカレンダーを作って、バリデーションの仕組みを作って、イベントを埋め込んで、メッセージを表示させる仕掛けを作るのって、ノウハウがあっても、かなり面倒な作業になるはず。ビジネスロジックのテストの前に、その仕掛けのテストもいるしね。

<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

  <!-- CacheFly を使って、Ext JS を読み込む -->
  <link rel="stylesheet" type="text/css" href="http://extjs.cachefly.net/ext-2.2.1/resources/css/ext-all.css" />
  <script type="text/javascript" src="http://extjs.cachefly.net/builds/ext-cdn-771.js"></script>

  <script type="text/javascript">

  Ext.QuickTips.init();       // ツールチップを有効
  Ext.form.Field.prototype.msgTarget = 'side';  // 各フィールドの横にバリデーション時のアイコンを表示させる

  function sample5() {
    var panel = new Ext.form.FormPanel({
      title:      'TestForm',
      height:     180,
      width:      320,
      frame:      true,
      items: [{                 // フォーム内の項目の配列
        xtype:      'textfield',
        name:       'name',
        fieldLabel: '氏名',
        allowBlank: false,      // ブランクを認めない
        maxLength:  20          // 長さ制限の指定
      }, {
        xtype:      'textfield',
        name:       'email',
        fieldLabel: 'e-mail',
        vtype:      'email',    // メルアドのバリデーションを指定
        maxLength:  50          // 長さ制限の指定
      }, {
        xtype:      'datefield',
        name:       'birthday',
        fieldLabel: '誕生日',
        format:     'Y.n.j',              // 表示書式指定
        minValue:   new Date(1900, 0, 1), // 最過去日付の指定
        maxValue:   new Date()            // 最未来日付の指定
      }, {
        xtype:      'numberfield',
        name:       'family',
        fieldLabel: '家族人数',
        minValue:   1,
        maxValue:   100
      }],
      buttons: [
        {text: '送信'}
      ]
    });

    return panel;
  }
  
  Ext.onReady(function() {
    var panel = sample5();
    panel.render('foo5');
  });

  </script>
</head>
<body style="margin:5mm;">
  <h1>Ext JS の味見 - 5</h1>
  <h2>- フォームのバリデーション -</h2>
  <br />
  <div id="foo5"></div>
</body>

</html>

実際の動作画面は、下図の通り。うまくスクリーンショットが撮れなかったんだけど、"!" の上にマウスを重ねると、エラーメッセージが表示されるようになってる。上のコードをコピペして、実際に動かして確かめてみて欲しい。