メニューの項目に応じた処理を実現する
メニュー項目に応じてGoogleマップの地図を切り替えるには、switch...caseを使って、項目に対応する地図の種類を指定すればOKです……が、Ext JSではもっと簡単な方法があります。
先ほど説明したとおり、handlerで呼び出される関数にはメニュー項目のオブジェクトが渡されます。ということは、あらかじめメニュー項目のプロパティに地図の種類を定義しておき、そのプロパティを参照すれば地図の切り替えが簡単に処理できます。プロパティは、Ext JSにもともと用意されているものと重ならないように、独自の名前で定義しておきます。ここでは mapTypeという名前で、項目に応じて以下のように地図の種類を指定します。
menu : [
{ text : '通常の地図', mapType : google.maps.MapTypeId.ROADMAP, handler : menuProc },
{ text : '航空写真', mapType : google.maps.MapTypeId.SATELLITE, handler : menuProc },
{ text : '通常+航空写真', mapType : google.maps.MapTypeId.HYBRID, handler : menuProc },
{ text : '地形', mapType : google.maps.MapTypeId.TERRAIN, handler : menuProc }
]
あとは、menuProc関数内で以下のようにすれば簡単にmapType(マップの種類)を取得できます。
function menuProc(obj){
Ext.Msg.alert('形式', obj.mapType);
}
サンプル03は、メニュー項目を選択するとアラートダイアログに地図の種類を表示するサンプルコードです。
●サンプル03のソースコード
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>Sample</title>
<link rel="stylesheet" href="resources/css/ext-all.css" type="text/css" media="all">
<link rel="stylesheet" href="css/main.css" type="text/css" media="all">
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript" src="js/ext-base.js"></script>
<script type="text/javascript" src="js/ext-all.js"></script>
<script type="text/javascript"><!--
Ext.BLANK_IMAGE_URL = 'resources/images/default/s.gif';
Ext.onReady(function(){
var win = new Ext.Window({
title: 'Ext JSメニューサンプル',
width: 520,
height: 480,
layout: 'fit',
items: {
html : 'Ext JSを使ってウィンドウとメニューを表示します。'
},
tbar : [
{ xtype : 'tbbutton',
text : '地図の種類',
menu : [
{ text : '通常の地図', mapType : google.maps.MapTypeId.ROADMAP, handler : menuProc },
{ text : '航空写真', mapType : google.maps.MapTypeId.SATELLITE, handler : menuProc },
{ text : '通常+航空写真', mapType : google.maps.MapTypeId.HYBRID, handler : menuProc },
{ text : '地形', mapType : google.maps.MapTypeId.TERRAIN, handler : menuProc }
]
}
]
});
win.show();
});
function menuProc(obj){
Ext.Msg.alert('形式', obj.mapType);
}
// --></script>
</head>
<body>
<h1>Ext JSウィンドウ+メニューサンプル</h1>
<p>ページが読み込まれるとウィンドウ内にメニューが表示されます。</p>
</body>
</html>