...

Dojo ISE Webインフラストラクチャー部 水野 雅裕 WebSphere sMash ハンズオン

by user

on
Category: Documents
20

views

Report

Comments

Transcript

Dojo ISE Webインフラストラクチャー部 水野 雅裕 WebSphere sMash ハンズオン
WebSphere sMash ハンズオン
5.Dojoアプリ入門
ISE Webインフラストラクチャー部
水野 雅裕
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
Agenda
ƒ Dojo Toolkit ~ 基本編
ƒ Dojo Toolkit ~ Dijit
ƒ Dojo Toolkit ~ Dojo Core
ƒ 【参考】 Dojo Toolkit ~ その他
2
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
Dojo Toolkit ~ 基本編
3
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
WWW
REST
sMashの適用シナリオ例
サービス
JSON
WebSphere sMash
REST
クライアント部分
スクリプト
アセンブル
フロー
REST
JavaScript
+ Dojo
ブラウザー
REST
HTTP
JSON
ATOM
RSS
スクリプト
JSON
or
サービス
REST
スクリプト
HTTP
サービス
ATOM
SOAP
リポジトリ
エンタープライズ
システム
Java SE
SOAP
WSDL
クライアント
サービス
サービス
JMS
ライブラリ
DB
データ
サービス
JMS
JMS
Provider
4
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
Dojo Toolkit V1
ƒ JavaScript ツールキットの1つ
WebSphere sMashは、
ƒ 主な特徴
– “フル・フューチャー”のツールキット
– 主要ブラウザーで稼動
– 軽量かつ高機能
Dojoを提供します
• GUI部品のみでなく、データや通信関連の機能も充実
http://dojotoolkit.org/
– 機能
• Dojo Core
–
–
–
–
–
Dojoの基本的な機能を提供
イベント処理システム
ドラッグ&ドロップ
言語ユーティリティ、ローカライゼーション
データ・アクセスetc
• Dijit (Dojo Widget)
– リッチなユーザー・インターフェースを提供
– 高品質で自然なデフォルトテーマ (置換可能)
– 拡張可能なレイアウト、フォーム
• DojoX (Extension)
– 先進的な機能を提供
– チャートやComet実装など
5
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
sMashでDojoを使用する方法
ƒ Dojoを使用するための準備
– 必要なモジュールをsMashのリポジトリーに取り込む
• config/ivy.xmlファイルの<dependencies>に以下を追加して稼動
<dependency org="zero" name="zero.dojo" rev="[1.0.0.0, 2.0.0.0["/>
DojoとsMashのDojo拡張機能がダウンロードされる
ƒ Dojoの宣言
– JavaScript内にDojo使用の宣言を記述してファイルをpublic
ディレクトリーに配置
<script type="text/javascript" src="/dojo/dojo.js"
djConfig="parseOnLoad: true, isDebug: false"></script>
sMash v1.0出荷時は、Dojo 1.1が使用されている
6
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
Dojo Coreの使用宣言
ƒ dojo.jsの指定
<script type="text/javascript“
src=“/dojo/dojo.js” djConfig="parseOnLoad: true"></script>
– Dojoの最もベースとなるモジュール
• 他のDojoモジュールのロードが可能に
• src属性: dojo.jsモジュールの配置されたディレクトリを指定
• djConfig: dojoの設定内容を指定。
– parseOnLoad:ドキュメント読込み後、dojoType属性が指定された要素のパースを実施
ƒ Dojo _baseに含まれるAPIの使用
– そのまま使用可能
• 例)次ページのサンプル・コードで使用しているAPI
– dojo.addOnLoad() : ページ読込時に行う処理を指定
– dojo.byId() : DOM要素の取得
– dojo.connect() : イベントの関連付け
ƒ Dojo _baseに含まれないAPIの使用
– API呼出しの前にdojo.require()でモジュールのロードが必要
7
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
Dojo 基本:コード例
dojo.jsの指定
Dojo baseをロード。これにより
<html>
他のDojo機能へのアクセスが可能に
<head>
<title>Web2.0 WS Sample01</title>
<script type="text/javascript“ src=“/dojo/dojo.js”
djConfig="parseOnLoad: true"></script>
dojo.addOnLoad()
<script type="text/javascript">
dojo.byId()
dojo.addOnLoad(init);
ページが読み込まれる際に
実行される関数を指定
function init() {
DOMエレメントの取得
var button = dojo.byId("button01");
dojo.connect(button, "onclick", function() {
dojo.connect()
var name = dojo.byId("name01");
dojo.string.pad()
発生したイベントと
var rawid = dojo.byId(“clubid01”);
関数を結びつける
明示的にロードした
dojo.require(“dojo.string”);
dojo.stringのpad()を使用
var fmtid = dojo.string.pad(rawid.value,6);
dojo.require()
dojo baseに含まれて
いないモジュールは、
明示的にロード。
8
alert(“会員番号”+fmdid+”の”+name.value +”さんですね");
});
}
</script>
</head>
<body>
名前を入力してください。<input type="text", id="name01">
会員番号を入力してください。 <input type="text", id=“clubid01">
<input type="button", id="button01" value="クリック!">
</body>
</html>
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
DojoでのAjax(非同期通信)プログラミング
キーワード
型
説明
content
Object
リクエスト送信時に送られるデータ。
error
Function
エラー時に呼び出される関数(エラー・ハンド
ラー)。
form
DOMNode
フォームのDOMNode。フォームの値が送信
される。
ƒ xhrXXX メソッド
handleAs
String
受信データの型。省略時値はtext。
– dojo.js
headers
Object
HTTPリクエストの追加のヘッダー。
load
Function
データ受信完了時に呼び出される関数。
preventCache
Bookean
キャッシュを無効化するか。省略時値はfalse。
sync
Boolean
同期型でリクエストを送信するときはtrue。省
略時値はfalse。
timeout
Integer
タイムアウト(ミリ秒)。満了時にはエラー・ハン
ドラーが呼び出される。
url
String
宛先URL。必須パラメータ。
…
…
…
ƒ クロス・ブラウザ化
ƒ XMLHttpRequestに比べ
– 容易
– 直感的
– HTTPメソッドに対応
•
•
•
•
xhrGet
xhrPost
xhrPut
xhrDelete
– パラメータ
• 右表を参照
• 必須パラメータはurlのみ
9
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
【参考】 Ajaxプログラミング : Dojo
ƒ GET 要求
function submit(){
dojo.xhrGet( {
url: "./member",
timeout: 5000,
handleAs: “json-comment-filtered",
load: function(response, ioArgs) {
dojo.byId("messageBox").innerHTML = response[0].firstname + “ ” + response[0].lastname;
return response;
},
error: function(response, ioArgs) {
dojo.byId("messageBox").innerHTML = “Error ! HTTP status code: “ + ioArgs.xhr.status;
return response;
}
});
}
<body>
<button id = “Get" onclick = "submit()">Get Member</button>
<div id = "messageBox"></div>
</body>
10
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
Dojo Toolkit ~ Dijit
11
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
Dijit(Dojo Widget)の使用
ƒ Dojo上で稼動するリッチなUIコンポーネント群
ƒ Dijitの呼び出し方
– 宣言的呼出し
• HTMLタグ内部で、dojoTypeを指定して呼び出す
• ページの初回ロード時にのみインスタンス化される
– 但し、djConfigでparseOnLoad: trueの設定が必要
<button dojoType="dijit.form.Button" id="button01">クリック!</button>
– プログラマティック呼出し
•
•
ユーザー・アクションの結果として、dijitを呼出したい場合に使用
第1引数にdijitのプロパティ、第2引数に置換えを行うDOMノード
var datetxt01 = new dijit.form.DateTextBox( {id:“datetxt01"}, dojo.byId("someDiv"))
– いずれの場合も、dojo.requre()でモジュールのロードが必要
– dijit.byId()で、dijitインスタンスの参照を取得可能
var btn01 = dijit.byId(“button01”) ;
dojo.connect(btn01,"onclick",obj1,myfunc01);
12
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
【参考】 Dijit一覧 ①フォーム / dijit.form
ƒ dijit.form.CheckBox
ƒ dijit.form.DateTextBox
ƒ dijit.form.TextArea
ƒ dijit.form.TextBox
ƒ dijit.form.ComboBox
ƒ dijit.form.InlineEditBox
ƒ dijit.form.DateTextBox
ƒ dijit.form.NumberSpiner
ƒ dijit.form.CurrencyTextBox
ƒ dijit.form.NumberTextBox
ƒ dijit.form.FilteringSelect
ƒ dijit.form.Validataion
TextBox
ƒ dijit.form.Slider
13
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
【参考】 Dijit一覧 ②コマンド制御 / dijit.form
ƒ dijit.form.Button
ƒ dijit.MenuItem
ƒ dijit.form.DropDownBusttion
ƒ dijit.form.ComboButton
ƒ dijit.Toolbar
14
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
【参考】 Dijit一覧 ③ユーザー・アシスタンス
ƒ dijit.Dialog
ƒ dijit.ProgressBar
ƒ dijit.TitlePane
ƒ dijit.TooltipDialog
ƒ dijit.Tooltip
15
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
【参考】 Dijit一覧 ④ 編集・表示
ƒ dijit.ColorPalette
ƒ dijit.Editor
ƒ dijit.Tree
16
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
【参考】 Dijit一覧 ⑤ レイアウト / dijit.layout
ƒ dijit.layout.LayoutContainer
ƒ dijit.layout.AccordionContainer
ƒ dijit.layout.SplitContainer
ƒ dijit.layout.StackContainer
ƒ dijit.layout.ContentPane
17
ƒ dijit.layout.TabContainer
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
Dijitテーマの使用
ƒ Dojoが事前に用意しているテーマ・デザインを利用可能
– <style>タグでCSSのインポート
<style type=“text/css”>
@import "/dijit/themes/tundra/tundra.css";
</style>
– <body>要素のclass属性にテーマ名を指定
<body class=“tundra”> … </body>
noir
soria
tundra
ƒDojo 1.1では、「nihiro」
を追加
18
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
Dijitを利用したコード例
<html>
<head>
Dijitテーマの呼出し
<title>Web2.0 WS Sample02</title>
<style type="text/css">
@import "/dijit/themes/tundra/tundra.css";
</style>
<script src="/dojo/dojo.js" djConfig="parseOnLoad: true"></script>
</head>
<body class="tundra“>
<script type="text/javascript">dojo.require("dijit.form.Button");</script>
<button dojoType="dijit.form.Button" id="button01">日付を指定する
<script type="dojo/method" event="onClick">
宣言的呼出し
dojo.require("dijit.form.DateTextBox");
var btn01 = new dijit.form.DateTextBox({id:"datebox01"}, dojo.byId("someDiv"))
ページ読込み時に
</script>
ロードされる
</button><br>
<div id="someDiv"></div>
プログラマティック呼出し
</body>
</html>
ボタンがクリック
された際に表示される
19
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
Dojo Toolkit ~ Dojo Core
20
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
Dojoでのイベント・ハンドリング
ƒ ページ読込みイベント時に処理を行う
– dojo.addOnLoad()
•
初期化の処理を実装。ページ読込み完了を待たず
開始されるのでパフォーマンスがよい
<script type=“text/javascript”>
function init() { // some initialization }
dojo.addOnLoad(init);
</script>
ƒ 明示的にイベントを結びつける
– dojo.connect()/dojo.disconnect()
•
DOMのイベントと関数を結びつける/破棄する
<script type="text/javascript">
function myfunc01(){ console.debug("myfunc01 is called"); }
var btn = dojo.byId("button01");
button01で”onclick”イベントが発生し
たときにobj1のmyfunc01が呼ばれる
evnt = dojo.connect(btn,"onclick",obj1,myfunc01);
…
[注意] 呼出した関数に戻り値
があっても拾えない
dojo.disconnect(evnt); //関連付けの破棄
イベントのハンドラーを渡す
</script>
•
オブジェクトや関数同志を関連付け
evnts[ ];
evnts[0] = dojo.connect(obj1,”func1”,obj2,”func2”);
evnts[1] = dojo.connect(glbfunc1,glbfunc2);
evnts[2] = dojo.connect(obj1,”func1”, glbfunc1);
evnts[3] = dojo.connect(glbfunc2,obj2,”func2”);
obj1のfunc1とobj2のfunc2を紐付ける
グローバル関数glbfunc1とglbfunc2を紐付ける
obj1のfunc1とglbfunc1を紐付ける
glbfunc2とobj2のfunc2を紐付ける
21
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
Dojoでのイベント・ハンドリング(つづき)
subscribe
publish
ƒ イベントのpublish/subscribe
– dojo.publish(トピック名,配列)
TOPIC
• トピックに対しイベントを通知
–
– トピック名:イベントを通知するトピック名
– 配列: 呼出す関数に渡される引数の配列
dojo.subscribe(トピック名,コンテキスト,関数)
• トピックへの登録
–
– トピック名:サブスクライブするトピック名
– コンテキスト:呼出される関数のコンテキスト
– 関数:イベント発生時に呼出される関数
dojo.unsubscribe(ハンドル)
• トピックへの登録解除
– ハンドル:トピックに登録した際のハンドル
22
<head>
・・・
<script type=“text/javascript”>
function rcvEvnt(msg){
console.debug(msg);
}
function makeEvnt(){
dojo.publish(“myTopic1”,[”EventHappen!”]);
}
function init(){
evnt1 =
dojo.subscribe(“myTopic1",null,rcvEvnt)
}
dojo.addOnLoad(init);
</script>
</head>
<body>
<button onclick=“makeEvnt”></button>
</body>
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
DOMとは?
ƒ Document Object Model
– JavaScriptなどのプログラミング言語からHTML文書/XML文書を操作するため
のインターフェース
• JavaScriptはHTML/XMLを解析し、1つ1つのタグや文字列をオブジェクトとして処理
• タグの入れ子構造をツリーとして表現、DOM Treeとして扱う
– 各オブジェクトはノードと呼ばれる(要素ノード、テキスト・ノードetc)
• DOMを操作することによって、ページを(再読込なしに)動的に更新できる
– W3C が策定する標準
• あくまでDOMは標準。DOMを実装するXMLパーサーはベンダー依存
<div id="example">
<h1>見出し</h1>
<p>段落1</p>
<p>段落2</p>
</div>
Internet Explorerで左のHTMLを
解釈した場合のDOM Tree
23
div
h1
p
p
#text
#text
#text
要素ノード
テキスト・ノード
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
Dojoでの基本DOM操作
– dojo.byId(id) :指定されたDOMノードをIDで取得
– dojo.place(node,refNode,position) : nodeをrefNodeのpositionに挿入
• position:“before”、”after”、”first”、”last”
※first/lastの場合は子要素として挿入される
<body>
<button onclick=onbutton() id="button01" >button01</button>
<script type="text/javascript">
function onbutton(){
dojo.byId("msg").innerHTML = “This node is inserted";
node = dojo.byId("msg")
msgノードをplace2
refNode = dojo.byId("place2");
ノードの前に挿入
dojo.place(node,refNode,“before");
}
</script>
<div id="parent">
<div id="place1">place1</div>
<div id="place2">place2</div>
<div id="place3">place3</div>
<div id="msg"></div>
</div>
</body>
24
msgノードのinnterHTMLプロパ
ティの値に文字列を指定
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
dojoDndItem
【参考】 Drag & Drop:dojo.dnd
ƒ Drag & Drop操作を容易に実装可能
– Source : アイテムをDrag可能なDOMノード
– Target : アイテムをDrop可能なDOMノード
dojo.dnd.
Source
dojo.dnd.
Target
[例:商品リスト]
[例:カート]
• dojo.dnd.Source : Source/Target双方の機能を持つ。通常はこちらを使用
• dojo.dnd.Target : 純粋にTargetの役割。アイテムを追加しても削除できない
– accept属性で、受け入れ可能なアイテムのdndTypeを指定可能
<div dojoType=“dojo.dnd.Source” jsId=“shelf” class=“source” >ソース・エリア</div>
・・・
<div dojoType=“dojo.dnd.Target” jsId=“cart” class=“target” accept=“group01”>ターゲット・エリ
ア</div>
– アイテムも、classにdojoDndItemを指定したDOMノードとして定義
• dndType: 移動可能なエリアを制御するために利用
• dndData: アイテムに関連付けるデータ
<img src=“Item01img.png" class="dojoDndItem" dndType=“group01“ dndData=“10”>/>
<img src=“Item02img.png" class="dojoDndItem" dndType=“group01,group02“ dndData=“5”/>
25
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
Drag&Dropのイベントをsubscribe
• /dnd/drop
:移動完了
【参考】 Drag & Drop:dojo.dnd
(続き)
• /dnd/start :移動開始
• /dnd/cancel :移動キャンセル
• /dnd/source/over :指定ソース上をマウス移動
<head>
・・・
<script type="text/javascript">
dojo.require(“dojo.dnd.Source”);
・・・
function init(){
dojo.dnd.Source
dojo.subscribe(“/dnd/drop”, function(source,nodes,iscopy){・・・});
のロード
dojo.subscribe(“/dnd/start”, function(source,nodes,iscopy){・・・});
dojo.subscribe("/dnd/cancel", function(){・・・});
dojo.subscribe("/dnd/source/over", function(source){・・・});
}
dojo.addOnLoad( init );
</script>
</head>
ソースの指定
<body> ・・・
dojo.dnd.Source
<td>商品リスト
<div dojoType=“dojo.dnd.Source” jsId=“shelf” accept=“gp01”>
<img src=“itm01.jpg” class=“dojoDndItem” dndType=“gp01“ dndData=“10”>
<img src=“Itm02.jpg” class=”dojoDndItem“ dndType=“gp01“ dndData=“5”/>
アイテムの指定
・・・
</div>
dojoDndItem
</td>
<td>ショッピング・カート
<div dojoType=“dojo.dnd.Target” jsId=“cart”>ターゲット・エリア</div>
</td>
ターゲットの指定
</body>
dojo.dnd.Target
26
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
文化的慣習
ƒ 日付/時間
– Dojoでは各国語へのフォーマット/各国語からのパースが可能
<script type="text/javascript">
dojo.require("dojo.date.locale");
var dt = new Date();
console.info("日本語:"+dojo.date.locale.format(dt {locale:'ja',formatLength:'full'}));
console.info(“仏 語:”+ dojo.date.locale.format(dt, {locale:‘fr',formatLength:'full'}));
var date = dojo.date.locale.parse(“2008年4月7日月曜日”,{selector:‘date’,formatLength: “full”});
console.info(date);
</script>
ƒ 通貨
– 表記方法、丸めなどの慣習も適用
<script type="text/javascript">
dojo.require("dojo.currency");
console.info(dojo.currency.format(1234.567, {currency: "USD"}));
console.info(dojo.currency.format(1234.567, {currency: "EUR"}));
console.info(dojo.currency.format(1234.567, {currency: "JPY"}));
</script>
27
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
日本語対応について
ƒ データとして日本語(UTF-8)を扱うことが可能
ƒ Dojoの各種リソースも日本語対応済み
– カレンダー、日付、時間、通貨、デフォルトメッセージ etc.
ƒ IMEの制御に対応する機能はない
文字化けに注意
・Shift-JIS範囲外の文字が入力
された場合
ƒ UTF-8対象部分
・他システムとデータ共有
(変換コンバーターが違う場合)
UTF-8化対象部分
HTML
Shift-JIS
CSS
Unicode
ブラウザー
JS
XML
DB
JVM
sMash
EBCDIC
JSON
ホスト
28
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
Dojoにおけるデータ・アクセス:dojo.data
ƒ データ・フォーマットに捉われないアクセス方法を提供
– データ・ストアがデータ・ソースのデータ・フォーマットを隠蔽
– dojo.data API
dojo.data API
9 abstractのAPI
9 全てのAPIを全てのデータ・ストアが
サポートしているわけではない
属性(Attribute)
要求
値(Value)
no
name
dpt
place
0100
川中
ISE
幕張
0200
山中
SWG
箱崎
0300
野中
ATS
幕張
アイデンティティ アイテム
(Item)
(Identity)
29
¾ dojo.data.api.Read
¾ dojo.data.api.Write
¾ dojo.data.api.Identity
¾ dojo.data.api.Notification
データ・ストア
データを読み込む
JavaScriptオブジェクト
• dojo.data.ItemFileReadStore
• dojo.data.ItemFileWriteStore
• dojox.data.CsvStore
• dojox.data.XmlStore
• dojox.data.OpmlStore
• dojox.data.HtmlTableStore
• dojox.data.AtomReadStore
• dojox.data.FlickrStore など
データ・ソース
¾ファイル
- JSON
- XML
- CSV
¾Webサービス等
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
dojo.data API
ƒ dojo.data の基本コンセプト
– データ・アクセスは個々のAPIに分割され、データ・ストア毎に実装を判断できる
• dojo.data.api.Read
– データ・アイテムやその属性を読み込む機能
> 検索条件にマッチするデータの取得、取得データのソートなどの機能を持つ
> レイジー・ロード機能、ページ・ロード機能など応用機能を持つストアもある
• dojo.data.api.Write
– データ・アイテムやその属性の作成、更新、削除を行う機能
> Undoが可能なよう newItem, deleteItem, setAttributeをトラッキング
> 保存を行ったときにまとめて書込み(バッチ・プロセッシング)
• dojo.data.api.Identity
– Identity(または複合Identity)により、ただ1つのアイテムを特定し取得する機能
• dojo.data.api.Notification
– データ・ストア内のアイテムの作成、削除、更新などのイベントを通知
> dojo.connect() で データ・ストアのonNew/onDelete/onSetのイベントと結びつける方法
> データ・ストアのonNew/onDelete/onSetの関数を、ユーザー・ロジックに置き換える方法
– アイテムやその属性は、常にデータ・ストアの機能を介して、アクセス、更新、作成、削除
が行われる。属性は決してアイテムから直接取得されない。
•
•
30
データ・ストアを介してアクセスすることで
内部構造の隠蔽が可能
データ・ストアは非常に軽い内部構造を利用でき、
メモリー負荷を軽減できる
○ val = someStore.getValue(item,”attr1”)
× val = item.attr1
× val = item.getValue(“attr1”)
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
[参考] データ・ストアのドライバーとその機能
Read Write
Identity
Notification
データ・
タイプ
dojo.data.ItemFileReadStore
9
8
9
8
JSON
dojo.data.ItemFileWriteStore
9
9
9
9
JSON
dojox.data.FlickrStore
9
8
8
8
JSON
dojox.data.XmlStore
9
9
8
8
XML
dojox.data.CsvStore
9
8
9
8
CSV
dojox.data.OpmlStore
9
8
9
8
OPML
dojox.data.HtmlTableStore
9
8
9
8
HTML
Table
dojox.data.QueryReadStore
9
8
9
8
JSON
31
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
データ・ストアの使用①
ƒ 例)dojo.data.ItemFileReadStore: JSONファイル読込み用データストア
urlでデータ・ソースと
– fetch(): 検索条件付きデータ取得
なるファイルを指定
dojo.require("dojo.data.ItemFileReadStore")
var dataStore = new dojo.data.ItemFileReadStore({url:"member.json"});
var gotList = function(items, request){ // データを全て取得した際に実行される処理
dojo.forEach(items, function(i){
console.info(dataStore.getValue(i,“name”));
});
}
var gotItem = function(item, request){ // アイテムを取得するたびに実行する処理 }
var gotError = function(error, request){ // データ取得時にエラーが発生した場合の処理 }
dataStore.fetch( {
検索はデフォルト 大文字小文字を区別する。
queryOptions: {ignoreCase: true},
区別したい場合はqueryOptions で
ignoreCase: trueを 指定。
query: { place: "Makuhari", dpt: "ISE.*" },
検索条件は複数指定可能。
onComplete: gotList,
*は任意の文字列、?は任意の一文字。
//onItem: gotItem,
なにも検索条件を指定していなければ、
onError: gotError
全てのアイテムを返す。
} );
データ取得イベント
•onComplete: 全アイテム取得した際に実行
•onItem: アイテム取得毎に実行
•onError: データ取得でエラーが発生した際に実行
32
(注意)onItemも共に指定されている場合には、
onCompleteで渡される取得データの配列は常にnull
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
データ・ストアの使用②
ƒ 例)dojo.data.ItemFileReadStore: JSONファイル読込み用データストア
– fetch(): ソートキーを指定し、データのソート
dojo.require("dojo.data.ItemFileReadStore")
var dataStore = new dojo.data.ItemFileReadStore({url:"member.json"});
・・・
ソートのキーをJSON形式で指定。複数のソート・キーも指定可能
var sortKeys = [
attribute:ソートのキーとなるattribute
{ attribute: “org”, descending: true }
descending:降順か否か
{ attribute: “name”, descending: false }
]
dataStore.fetch({
sort: sortKeys,
ソートの実行とソートのキーを明示。
onComplete: gotList,
onError: gotError
});
– fetchByIdentity() : Identityを指定してのデータ取得
dojo.require("dojo.data.ItemFileReadStore")
identityとしてキーを指定。
var dataStore = new dojo.data.ItemFileReadStore({url:"member.json"});
ここではtextboxで取得した情報をキーに指定
dataStore.fetchByIdentity({
identity: dojo.byId(“textbox01").value,
onItem: function(item){ console.debug(“Item is:”,dataStore.getValue(item,“name”)); }
});
33
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
データ・ストアの使用③
ƒ 例)dojox.data.XmlStore:
XMLファイル読込用データストア
// dojo.require("dojo.data.ItemFileReadStore");
XmlStoreを作成
dojo.require("dojox.data.XmlStore");
// var dataStore = new dojo.data.ItemFileReadStore({url:"member.json"});
var dataStore = new dojox.data.XmlStore({url:"member.xml, root:”member”});
var gotList = function(items, request){ // データを全て取得した際に実行される処理
dojo.forEach(items, function(i){
console.info(dataStore.getValue(i,“name”));
ロジックはそのまま使用可能
});
}
var gotItem = function(item, request){ // アイテムを取得するたびに実行する処理 }
var gotError = function(error, request){ // データ取得時にエラーが発生した場合の処理 }
dataStore.fetch( {
onComplete: gotList,
onItem: gotItem,
onError: gotError
} );
34
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
例:todoufuken.json
データ・ストアとdijitの連携
ƒ 容易に連携可能
{ label: ‘name’, identifier: 'name',
items: [
{ name:'北海道', type:'chihou' },
{ name:‘東北’, type:‘chihou’,
children:[{_reference:'青森'}, ・・・'}] },
{ name:'青森', type:'ken'},
{ name:'秋田', type:'ken'},
{ name:'岩手', type:'ken'},
・・・
<head>
・・・
<script src=“/dojo/dojo.js”
djConfig="parseOnLoad: true"></script>
<script>
dojo.require("dojo.data.ItemFileReadStore")
dojo.require("dijit.Tree");
dojo.require("dojo.parser")
データ・ストア
</script>
にIDをつける
</head>
<body class="tundra">
<div dojoType=“dojo.data.ItemFileReadStore”
データ・ストア
のIDを渡す
url="todoufuken.json" jsid="kenmeiStore"/>
<div dojoType=“dijit.Tree” store=“kenmeiStore”
labelAttr=“name“ label=”都道府県” query=“{ type:‘chihou’ }”>
</div>
</body>
35
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
【参考】 sMash用データ・ストア
ƒ ZRM用データ・ストア ドライバー
– zero.resource.DataStore
• ZRMを通じて、データの読込み、追加、変更が可能
• 表示用dijitとして、zero.grid.DataGrid、dojox.grid.Grid、dijit.form.ComboBox、dijit.form.FilteringSelect
のみサポート
– fetch
• 全てのデータに対してfetch()可能
– フィルタリング
• fetch()で取得したデータをフィルター可能
– ソート
• fetch()で取得したデータをソート可能
– ページング
• fetch()でデータを取得する際にページング可能
アプリ明示的に
contextRootを持って
いる場合はここに指
定する必要がある
<script type="text/javascript">
dojo.require("dojo.parser");
dojo.require("zero.resource.DataStore"); </script>
・・・
<div dojoType="zero.resource.DataStore" jsId="thestore“ contextRoot=""></div>
・・・
ƒ zero.grid.DataGrid
– dojox.grid.GridのDojo独自拡張
– ZRMのデータをzero.resource.DataStoreを使用してGrid表示させる事が可能
36
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
【参考】 Dojo Toolkit ~ その他
37
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
【参考】 sMash独自のDojo拡張
ƒ DataStoreのZRM用実装 (先述)
ƒ Atom Data Access機能
Atom Data Access機能は、sMashでDojoを
リポジトリー追加するとその中に入っている
– Atom library - Atomプロトコルの実装
– The AppStore - Atom用のデータ・ストア
– The Atom Widgets - Atom情報の表示/編集機能
FeedViewer Widget
<div dojoType="ibm_atom.widget.FeedViewer“ widgetId="fv1“
url="samplefeed.xml" entrySelectionTopic="atomfeed/entry/topic" />
FeedEntryEditor Widget
<div dojoType="ibm_atom.widget.FeedEntryViewer" widgetId="feedEditor“ enableMenu="true“
enableMenuFade="true“ enableEdit="true” displayEntrySections="title,authors,summary“
entrySelectionTopic="atomfeed/entry/topic" />
38
© 2008 IBM Corporation
© 2008 ISE Corporation
WebSphere sMash ハンズオン
【参考】 Dojoアプリケーションのテスト
ƒ Firefox + Firebug
– Firebug
• Firefoxのプラグインで、強力な開発支援ツール
–
–
–
–
–
39
リアルタイムなコンテンツの表示/編集
各種モニター
デバッガー
統合コンソール出力
DOMの内容表示
© 2008 IBM Corporation
© 2008 ISE Corporation
Fly UP