SlideShare a Scribd company logo
1 of 47
Download to read offline
【B-4】Dojo 徹底解剖!
〜~ XPages で Dojo を有効活⽤用するには?	
  〜~	
  
⽇日本アイ・ビー・エム株式会社
東京ソフトウェア開発研究所
⼩小野	
  充志

2013/11/07

© 2013 IBM Corporation

1
特記事項	
  
•  本資料料の記載内容は私個⼈人の⾒見見解であり、必ずしも所属する企業の⽴立立場、
戦略略、意⾒見見を代表するものではありません。
•  本資料料の記載内容は、できる限り正確を期すよう努めてはおりますが、
いかなる明⽰示または暗黙の保証も責任も負いかねます。
•  本資料料の情報は、使⽤用先の責任において使⽤用されるべきものであること
を、あらかじめご了了承ください。
•  掲載情報は不不定期に変更更されることもあります。他のメディア等に無断
で転載する事はご遠慮ください。
•  当資料料をコピー等で複製することは、執筆者の承諾諾なしではできません。
•  また、当資料料に記載された製品名または会社名はそれぞれの各社の商標
または登録商標です。
IBM、IBMロゴ、DB2、Lotus、Lotus	
  Notes、Lotus	
  Domino、Quickr、Sametime、Workplace、WebSphereは、International	
  Business	
  Machines	
  Corporationの⽶米国およびその他の国における商標。	
  
JavaおよびすべてのJava関連の商標およびロゴは	
  Sun	
  Microsystems,	
  Inc.の⽶米国およびその他の国における商標。	
  
Microsoft,	
  Windowsは	
  Microsoft	
  Corporationの⽶米国およびその他の国における商標。	
  
Linuxは、Linus	
  Torvaldsの⽶米国およびその他の国における商標。	
  
他の会社名、製品名およびサービス名等は、それぞれ各社の商標。	
  

2013/11/07

© 2013 IBM Corporation

2
⾃自⼰己紹介	
  
•  名前:⼩小野	
  充志(おの	
  あつし)
•  所属:⽇日本アイ・ビー・エム
•  Twitter:@onoat(pizza bot)
•  XPages および Dojo と私:
–  ICS (Lotus) BPTE チームに所属
•  技術⽀支援活動を通じて XPages および Dojo と出会う
–  その後社内の Dojo Mobile 開発プロジェクトチームへ
•  本家 Dojo Mobile へ少しだけコントリビュート
–  現在は ECM 製品開発チームに所属
•  Dojo を使った UI 開発
–  ICS コミュニティー活動は現在も継続中
•  テクてく Lotus 技術者夜会	
  開発者編
•  XPages Extension Library Japan チーム	
  
2013/11/07

© 2013 IBM Corporation

3
アンケート	
  
•  「はい」の⽅方は、Web ミーティング画⾯面左上にある「挙
⼿手」アイコンをクリックしてください。

練習:まずは皆さん「挙⼿手」してみてください	
  
質問1: jQuery を使ったことがありますか?	
  
質問2: Dojo を使ったことがありますか?	
  
2013/11/07

© 2013 IBM Corporation

4
背景	
  
•  技術者 xxx ⼈人に聞きました

–  Q: 「Dojo をどう思いますか?」
–  A:

なんとかしない
と!	
  

参考資料料が少ない。特に⽇日本語。	
  

勉強してはみたものの難しい。	
  

Dojo?	
  やっぱり jQuery でしょ!	
  

2013/11/07

© 2013 IBM Corporation

5
背景	
  
•  イケヤマくんにも相談しました	
  
Dojo のことはキライでも
XPages のことはキライに
ならないでください!	
  

じぇじぇじぇ!	
  

2013/11/07

jQuery?
倍返しだ!!	
  

Dojo いつやるの?
今でしょ!!	
  

© 2013 IBM Corporation

6
本セッションの⽬目的	
  
•  Dojo 単体として機能紹介するのではなく、jQuery と⽐比較
しながら徹底解剖
–  「難しい」といわれる原因を探る
–  よく知られた jQuery と⽐比較することで理理解を助ける
–  似た機能を⼀一緒に覚えられるので⼀一⽯石⼆二⿃鳥!
  ※ ただし講師も jQuery 初⼼心者なのでご助⾔言等お願いいたします

•  ⽐比較を通じて学んだ Dojo の機能を XPages で利利⽤用すること
で、リッチなアプリケーションを開発するためのさらなる
選択肢を提供
–  Dojo、jQuery、そしてその他 JavaScript ライブラリ全般に興味を
もっていただくきっかけとなれば幸いです	
  

2013/11/07

© 2013 IBM Corporation

7
アジェンダ	
  
•  jQuery との⽐比較による Dojo 徹底解剖
•  XPages でより Dojo を有効活⽤用するには?

2013/11/07

© 2013 IBM Corporation

8
jQuery との⽐比較による Dojo 徹底解剖	
  

2013/11/07

© 2013 IBM Corporation

9
jQuery と Dojo
•  オープンソースの JavaScript ライブラリ
–  jQuery
•  http://jquery.com/
•  最新バージョンは 1.10.2 および 2.0.3

–  Dojo (正式名称は Dojo Toolkit)

•  http://dojotoolkit.org/
•  最新バージョンは 1.9.1 (2.x ストリームも開発予定)

•  ともにWeb アプリケーション開発を効率率率化するための機能
を提供
–  クロスブラウザ対応
–  DOM操作の簡易易化
–  イベント処理理、アニメーション、AJAX、などなど	
  

2013/11/07

© 2013 IBM Corporation

10
jQuery と Dojo の⽐比較	
  
•  ポイントをピックアップして⽐比較
–  機能概要⽐比較

•  モジュール構成
•  HTMLへのロード⽅方法
•  基本コンセプト

–  機能詳細⽐比較

•  コア API
•  UI ウィジェット

2013/11/07

© 2013 IBM Corporation

11
jQuery と Dojo の⽐比較	
  
•  ポイントをピックアップして⽐比較
–  機能概要⽐比較

•  モジュール構成
•  HTMLへのロード⽅方法
•  基本コンセプト

–  機能詳細⽐比較

•  コア API
•  UI ウィジェット

2013/11/07

© 2013 IBM Corporation

12
jQuery:モジュール構成	
  
•  コアモジュールは js ファイル1つだけ
–  圧縮版と⾮非圧縮版を提供

シンプル!	
  

•  開発時には⾮非圧縮版が便便利利。
•  ユーザーがビルドして圧縮版を作るケースはあまりない(?)

–  例例:バージョン 1.10.1 の場合

•  圧縮版:  jquery-1.10.1-min.js
•  ⾮非圧縮版:  jquery-1.10.1.js

•  各プラグインの js ファイルおよび css ファイル
–  例例:jQuery UI のすべてのプラグインを利利⽤用する場合

•  js ファイル(⾮非圧縮版)
–  jquery-ui.js
•  css ファイル(※ ダウンロードの際にテーマを選べる)
–  jquery.ui.all.css
•  i18n ファイル(ある場合のみ。jQuery UI の場合は datepicker ⽤用)
–  jquery-ui-i18n.js

2013/11/07

© 2013 IBM Corporation

13
jQuery:HTMLへのロード⽅方法	
  
•  コアモジュールおよび必要なプラグインの js ファイル・ css
ファイルを script タグ・link タグで読み込む
•  あとは JavaScript で jQuery API を呼び出すだけ
<link rel="stylesheet" href="themes/base/jquery.ui.all.css"/>
<script src="jquery-1.10.1.js"></script>
<script src="jquery-ui.js"></script>
<script src="jquery-ui-i18n.js"></script>
<script>
$(function() {
$("#effect").addClass("newClass");
});
</script>
とてもシンプルでわかりやすい!
でもプラグインがたくさんあるとき
は少し⼤大変?	
  

2013/11/07

© 2013 IBM Corporation

14
jQuery:基本コンセプト	
  
•  「write less, do more」

シンプルでクール!	
  

–  $ で jQuery にアクセス
–  メソッドをつなげて記述する「メソッドチェーン」

•  コアモジュールは軽量量で⾼高速
–  必要最低限の機能のみ

•  DOM 操作、イベント処理理、AJAX、アニメーション、など

•  プラグインの仕組みにより拡張が容易易

–  jQuery グローバルオブジェクトを拡張
–  UI ウィジェットも jQuery UI というプラグインとして提供

•  セレクタでの DOM ノード選択が強⼒力力でよく使われる
–  例例:class が “red” の div すべての背景を⾚赤にして表⽰示	
  

$("div.red").css("background-color", "red").show();
セレクタでのノード選択	
  
2013/11/07

メソッドチェーン	
  

© 2013 IBM Corporation

15
Dojo:モジュール構成	
  
•  ダウンロードしたモジュールの中に3つのパッケージが同梱されている
–  dojo:コア機能のパッケージ
–  dijit:UI ウィジェットパッケージ
–  dojox:拡張機能や実験段階機能をまとめたパッケージ

なんか
ややこしい?	
  

•  コアモジュールの本体は dojo パッケージの dojo.js
•  その他のモジュールは、必要になったときに JavaScript でロードする
–  例例:dijit.Calendar モジュールを使いたい場合

•  dojo.require(“dijit.Calendar”)
•  require([“dijit/Calendar”], function(Calendar){ … }) (1.7 以降降の AMD ⽅方式)

–  ロードのたびにリクエストが⾶飛ぶので、本番環境などではビルドして1つの
js にまとめるとパフォーマンスが向上

•  それぞれのパッケージやモジュールに css ファイルも⽤用意されている
–  dojo:dojo/resources/dojo.css
–  dijit:dijit/themes/claro/claro.css (claro テーマの場合)	
  
2013/11/07

© 2013 IBM Corporation

16
(参考)AMD
•  AMD: Asynchronous Module Definition
–  参考資料料(⽇日本語)

•  Dojo道場	
  〜~	
  第11回「Dojo 最新動向 - Asynchronous Module Definition」
–  http://codezine.jp/article/detail/6482

–  CommonJS という JavaScript 標準化グループによって提唱
•  http://www.commonjs.org/

–  require によってモジュールをロードした際に⾮非同期にロード処理理を⾏行行うこと
で⾼高速化
•  http://wiki.commonjs.org/wiki/Modules/AsynchronousDefinition

–  さまざまな JavaScript ライブラリがこの標準に対応してきている
•  dojo では 1.7 から対応(ローダーとロードされる側両⽅方)
•  jQuery も 1.7 から対応(ロードされる側のみ。ローダーはなし。)

–  コードの書き⽅方が変わる

•  旧: dojo.require(“dijit.Calendar”)
•  新: require([“dijit/Calendar”], function(Calendar){ ….. });

–  9.0 現在 XPages では互換性のため同期ロードを使⽤用	
  
2013/11/07

© 2013 IBM Corporation

さらに
複雑に...

17
Dojo:HTMLへのロード⽅方法	
  
•  コアモジュールである dojo.js および必要な css ファイルを
script タグ・link タグで読み込む
–  data-dojo-config 属性で load 時にパラメータを渡すことも可能

•  あとは JavaScript で dojo API を呼び出すだけ	
  

<link rel="stylesheet" href="dojo/resources/dojo.css">
<link rel="stylesheet" href="dijit/themes/claro/claro.css">
<script src="dojo/dojo.js" data-dojo-config="parseOnLoad:false"></script>
<script>
dojo.ready(function(){
dojo.addClass(dojo.byId("effect"), "newClass");
});
</script>

※ このページも含め、以下コード例例は
すべて、先ほど紹介した AMD を使わ
ない形式で紹介します	
  
2013/11/07

コードの構成は jQuery と
ほとんど同じで⽐比較的
シンプル!	
  
© 2013 IBM Corporation

18
Dojo:基本コンセプト(1)	
  
•  とくにキャッチフレーズはない(?)
•  コアモジュールは軽量量

難解にみえるが
⼤大規模開発では
有効!	
  

–  しかし jQuery のコアモジュールにはない機能がいくつかある

•  モジュール・フレームワーク
–  モジュールの定義	
  (dojo.provide or define)
–  モジュールのロード(dojo.require or require (AMD))
–  継承の仕組み (dojo.declare)
これは
•  国際化、アクセシビリティ	
  など
ありがたい!	
  

•  モジュールを開発することで拡張が可能

–  dojo プロジェクトの中で開発されている拡張機能は dojox などの
モジュールにほとんど同梱されている

•  jQuery でいうところのプラグインのようなリリースサイクルに関する
⾃自由度度がない

–  別パッケージとしてモジュールを開発しているものもある
•  例例:gridx プロジェクト  https://github.com/oria/gridx/

2013/11/07

© 2013 IBM Corporation

19
Dojo:基本コンセプト(2)	
  
•  jQuery でよく取り上げられるセレクタによる DOM ノード
選択機能は dojo にもある
–  dojo.query()
–  でも普及度度はいま⼀一歩
セレクタでのノード選択	
  

dojo.query はメソッド
チェーンに対応している
が、dojo 全般としては対
応していない API が多い。	
  

dojo.query("div.red").style("backgroundColor", "red");
もしくは	
  
dojo.query("div.red").forEach(function(node){
dojo.style(node, "backgroundColor", "red");
});

メソッドチェーンを使わない書き⽅方。
コードは少し⻑⾧長くなるけど結果は同じ。	
  
2013/11/07

© 2013 IBM Corporation

20
機能概要⽐比較のまとめ	
  

シンプルさは
jQuery!	
  

jQuery

Dojo

いい
ところ	
  

•  コンセプトがシンプル
•  デザイナーにも優しい強⼒力力
なセレクタ機能
→ デザイナーツールにも採⽤用
•  jQuery を使ったツールやア
プリが沢⼭山ある	
  

•  多機能
•  モジュールを継承した開発
のしやすさ(Java に近い)
•  国際化、アクセシビリティ
なども標準サポート	
  

気になる
ところ	
  

•  ⼤大規模開発ではどう?
•  いろいろなプラグインを利利
⽤用する際のリスクは?	
  

•  多機能すぎてコンセプトが
複雑

向いていそ •  まさにライブラリ
うなケース	
   •  デザインを中⼼心とした開発
•  Web サイト開発、中⼩小規模
Web アプリ開発?	
  
2013/11/07

© 2013 IBM Corporation

•  ライブラリというよりはフ
レームワーク
•  アクセシビリティなどの要
件が必須の場合
•  ⼤大規模 Web アプリ開発?
21
jQuery と Dojo の⽐比較	
  
•  ポイントをピックアップして⽐比較
–  機能概要⽐比較

•  モジュール構成
•  HTMLへのロード⽅方法
•  基本コンセプト

–  機能詳細⽐比較

•  コア API
•  UI ウィジェット
•  モバイル

2013/11/07

© 2013 IBM Corporation

22
コア API 詳細⽐比較	
  
•  jQuery のコア API
– 
– 
– 
– 
– 
– 
– 

セレクタ
DOM 操作
Ajax
イベント
アニメーション
Deferred
…

•  Dojo のコア API
– 
– 
– 
– 
– 

dojo.query
dojo.addClass, dojo.style, etc
dojo.xhr, dojo.xhrGet, etc
dojo.connect / dojo.on
dojo.fadeIn,
dojo.animateProperty, etc
–  dojo.Deferred
–  dojo.dnd (ドラッグ&ドロップ)	
  

コアのAPIレベルでの機能
はほぼ同じ!	
  

2013/11/07

© 2013 IBM Corporation

23
コアAPI:セレクタ、DOM操作	
  
•  例例:td タグ直下の div でクラスが red のものの背景を⾚赤に
<div class="red">a</div>
<table><tbody><tr>
<td><div class="red">b</div></td>
<td><div class="blue">c</div></td>
</tr></tbody></table>

–  jQuery
$("td > div.red").css("background-color", "red");

–  Dojo
dojo.query("td > div.red").style("backgroundColor", "red");
dojo.query("td > div.red").forEach(function(node){
dojo.style(node, "backgroundColor", "red");
});
2013/11/07

© 2013 IBM Corporation

24
コアAPI:AJAX
•  例例:サーバーの message.txt ファイルを読み込んで表⽰示
–  jQuery
$.get("message.txt", function(data){
$("#messages").html(data);
});

–  Dojo
dojo.xhrGet({
url: "message.txt",
handleAs: "text",
load: function(data){
dojo.byId("messages").innerHTML = data;
}
});

2013/11/07

© 2013 IBM Corporation

25
コアAPI:アニメーション	
  
•  例例:イメージ(id == pizza)をフェードインアニメーション
で表⽰示
–  jQuery
$("#pizza").fadeIn(1000);

–  Dojo
dojo.fadeIn({
node: "pizza",
duration: 1000
}).play();

(参考)Dojo道場	
  〜~	
  第5回「アニメーションを使いこな
す」        
        http://codezine.jp/article/detail/5759

2013/11/07

© 2013 IBM Corporation

26
UI ウィジェット詳細⽐比較	
  
•  jQuery UI のウィジェット
– 
– 
– 
– 
– 
– 
– 
– 
– 
– 
– 

アコーディオン
オートコンプリート
ボタン
⽇日付ピッカー
ダイアログ
メニュー
プログレスバー
スライダー
数値スピナー
タブ
ツールチップ

•  Dojo ウィジェット
– 
– 
– 
– 
– 
– 
– 
– 
– 
– 
– 

dijit.layout.AccordionContainer
dijit.form.ComboBox
dijit.form.Button
dijit.form.DateTextBox
dijit.Dialog
dijit.Menu
dijit.ProgressBar
dijit.form.HorizontalSlider
dijit.form.NumberSpinner
dijit.form.TabContainer
dijit.Tooltip

UI ウィジェットも
ほぼ同じ機能をもっている!	
  

2013/11/07

© 2013 IBM Corporation

27
⽐比較のまとめ	
  
•  コンセプトレベル

–  jQuery はシンプルでわかりやすいが、Dojo は「クセ」がある
•  機能が⾜足りないわけではなく、むしろ多機能すぎるため
•  うまく「クセ」をふりはらって適材適所での利利⽤用を!

•  API レベル

–  コア API、UI ウィジェットともに、それほど⼤大きな差異異はない
–  jQuery と⾮非常に似ているので、jQuery での同じ機能について⼀一緒に
調べることで Dojo の機能についても理理解できる場合がある

•  例例:Deferred
–  Dojo の Deferred で検索索しても⽇日本語情報はほとんど出てこないが、
jQuery の Deferred について検索索すると⽇日本語資料料が多く⾒見見つかる

XPages のセッションの中ではこれまであまりとりあげられなかった
コア API にも是⾮非注⽬目してみてください!	
  
2013/11/07

© 2013 IBM Corporation

28
あれ、⽇日本語資料料の問題は?	
  
•  今あるものをいくつかピックアップしておきます

–  テクてく Lotus 技術者夜会  2011/01/21  Dojo Toolkit 概要
•  https://www.ibm.com/developerworks/community/files/app?lang=ja#/
collection/46fe748d-f171-4c53-9afd-41aa95393682

–  「Dojo道場」〜~実⽤用アプリ構築のためのベストプラクティス
•  http://codezine.jp/article/corner/397

•  英語ですが API ドキュメントなどは重宝します
–  Dojo Toolkit API Documentation
•  http://dojotoolkit.org/api/

–  Dojo Toolkit Documentation
•  http://dojotoolkit.org/documentation/

•  是⾮非コミュニティーの皆さまのお⼒力力をお貸しください!	
  
2013/11/07

© 2013 IBM Corporation

29
XPages でより Dojo を有効活⽤用するには?	
  

2013/11/07

© 2013 IBM Corporation

30
XPages と Dojo
•  XPages と Dojo の相性はとてもいい

–  なにもしなくても dojo がページにロードされている
–  Dojo のビルドなどを気にしなくても CSS や JavaScript を集約する機
能が XPages にはついている(※ Notes/Domion 8.5.3 以降降)
–  Dojo のモジュールをロードするための resources プロパティもある
Dojo の「クセ」の部分をかなり隠蔽してくれている	
  

•  Notes/Domino のバージョンによって Dojo のバージョンが
変わる点にはご注意ください
Notes/Domino

8.5

8.5.1

8.5.2

8.5.3

9.0

9.0.1

Dojo Toolkit

1.1.1

1.3.2

1.4.3

1.6.1

1.8.1

1.8.3

2013/11/07

© 2013 IBM Corporation

31
XPages で Dojo をより有効活⽤用するには?	
  
•  Dojo のコア API を使ってみましょう

–  これまで XPages の技術セッションではあまり API は紹介されず、
Dojo = UI ウィジェットとして紹介する機会が多かったのですが、
今回のセッションを機会に Dojo の API を使ってみましょう!

•  XPages のコントロールの中で使われている Dojo の UI ウィ
ジェットの API を呼び出してみましょう
–  特に XPages Extension Library には Dojo の UI ウィジェットをその
ままコントロール化したものが多いため、それらの UI ウィジェット
の API を呼び出すことでさまざまな拡張ができます

•  XPages のコントロールにはない UI ウィジェットの利利⽤用も
もちろん有効です

–  Dojo にはまだまだおもしろい UI ウィジェットがたくさんあります!	
  

2013/11/07

© 2013 IBM Corporation

32
XPages での Dojo 活⽤用例例	
  
•  例例1:Dojo コア API の利利⽤用

–  セレクタ(dojo.query)
•  [参考]: XPagesのRadio Button Groupから選択された値をクライアント
Javascriptで取得する⽅方法
–  http://bit.ly/18iPXrq
–  アニメーション(dojo.animateProperty)
–  ドラッグ&ドロップ (dojo.dnd)

•  例例2:コントロールの中で使われている Dojo ウィジェットに API を
使ってアクセス
–  タブ・コンテナーのタブの選択
–  アコーディオン・コンテナーのペインを開く(アニメーション付)

•  例例3:コントロールには使われていない Dojo ウィジェットを利利⽤用
–  チャート(dojox.charting)
–  ゲージ(dojox.widget.gauge)
–  描画ウィジェット(dojox.drawing)※ Experimental

2013/11/07

© 2013 IBM Corporation

33
例例1:Dojo コア API の利利⽤用(1)	
  
•  セレクタ(dojo.query)
–  例例:表の列列・⾏行行の選択

•  カラーパレットで指定した⾊色で表の列列・⾏行行を選択して塗りつぶし	
  
あらかじめ表のセルに何⾏行行何列列か分かるよ
うなスタイルクラスを設定しておく
例例: <tr class=“row1”><td class=“col1”>…

列列選択	
  

dojo.query("td.col3").style("backgroundColor", dijit.byId("#{id:palette}").get("value") || "red");

⾏行行選択	
  

dojo.query(“tr.row3 td").style("backgroundColor", dijit.byId("#{id:palette}").get("value") || "red");

2013/11/07

© 2013 IBM Corporation

34
例例1:Dojo コア API の利利⽤用(2)	
  
•  アニメーション(dojo.animateProperty)

–  Extension Library のサンプル NSF にもいろいろ例例が載っています
•  http://www.xpages.jp/xpagesext.nsf/Core_DojoEffects.xsp

–  例例:スライダーで指定した倍率率率にイメージを拡⼤大縮⼩小スライダーには
Extension Library の「Dojo Horizontal Slider」を使⽤用
•  スライダーの onChange イベントで dojo.animateProperty を使⽤用し、
指定された倍率率率にイメージをアニメーション付きで拡⼤大縮⼩小する

イメージをアニメーション
付きで拡⼤大	
  

2013/11/07

var ratio = thisEvent; // Slider で指定された倍率
dojo.animateProperty({
node: "#{id:logo}",
properties: {
width: 149 * ratio,
height: 33 * ratio
},
duration: 1000
}).play();

© 2013 IBM Corporation

35
例例1:Dojo コア API の利利⽤用(3)	
  
•  ドラッグ&ドロップ(dojo.dnd)

–  例例:ドラッグ&ドロップで移動可能な「メモ」を作成する
•  dojo.dnd.Moveable モジュールを利利⽤用
–  ノードをドラッグ&ドロップで移動可能にしてくれる	
  

var textarea = dojo.byId("#{id:inputTextarea1}");

メモ内容を⼊入⼒力力してボタンを
押すと、ドラッグ&ドロップ
で移動可能なメモを作成	
  
※ 保存の処理理は実装していないので、
リロードするとメモは消えます	
  
2013/11/07

// メモの div ノードを作成して body に追加
var memoNode = dojo.create("div", {
innerHTML: textarea.value,
style: {
position: "absolute",
top: "80px",
left: "10px",
width: "100px",
height: "100px",
backgroundColor: "lightyellow",
border: "1px solid #CCCCCC"
}
}, dojo.body());
// Moveable を作成してドラッグ&ドロップ可能に
new dojo.dnd.Moveable(memoNode);
© 2013 IBM Corporation

36
例例2:コントロールの中のウィジェットの API を利利⽤用(1)	
  

•  タブ・コンテナーのタブの選択

–  Extension Library の「Dojo Tab Container」「Dojo Tab Pane」を
使って作成したタブを、API を使ってプログラムで選択する

•  dijit.byId(id): id で指定されたウィジェットを取得する
•  <TabContainer>.selectChild(<TabPane>):	
  指定された TabPane を開く	
  

ボタンを押すと対応するタブが開く	
  

dijit.byId("#{id:djTabContainer1}")
.selectChild(dijit.byId("#{id:djTabPane2}"));

2013/11/07

© 2013 IBM Corporation

37
例例2:コントロールの中のウィジェットの API を利利⽤用(2)	
  

•  アコーディオン・コンテナーのペインを開く

–  Extension Library の「Dojo Accordion Container」「Dojo Accordion
Pane」を使って作成したアコーディオンのペインを、API を使って
プログラムで開く
•  <AccordionContainer>.selectChild(<AccordionPane>, true):
指定された AccordionPane をアニメーション付きで開く。第2引数の
true を省省略略するとアニメーションなしで開く。

ボタンを押すと対応するペインが
アニメーション付きで開く	
  

dijit.byId("#{id:djAccordionContainer1}")
.selectChild(dijit.byId("#{id:djAccordionPane2}"), true);

2013/11/07

© 2013 IBM Corporation

38
例例3:コントロールにないウィジェットの利利⽤用(1)	
  
•  チャート(dojox.charting)

–  例例:スパイダー・チャート(dojox.charting.plot2d.Spider)

•  Dojo Toolkit の dojox.charting モジュールの tests フォルダにある
スパイダー・チャートのサンプルの1つを XPage に取り込んでみる
–  http://bit.ly/19Umecc

•  easing アニメーション
付きで表⽰示
•  凡例例で選択したものだけ
をフィルター表⽰示	
  

–  他にもたくさんのチャートが⽤用意されています!	
  
2013/11/07

© 2013 IBM Corporation

39
例例3:コントロールにないウィジェットの利利⽤用(1)	
  
// Spider チャートの生成(データは固定)
var chart = new dojox.charting.Chart("#{id:spiderChart}")
.setTheme(dojox.charting.themes.PlotKit.blue)
XPages のソース例例
.addPlot("default", {
(onClientLoad 時の
type: "Spider",
クライアントサイド
labelOffset: -10,
divisions: 7,
JavaScript)	
  
axisColor: "lightgray",
spiderColor: "silver",
seriesFillAlpha: 0.2,
spiderOrigin: 0.16,
markerSize: 3,
precision: 0,
spiderType: "polygon"
})
.addSeries("China", {data: {"GDP": 2,"area": 6,"population": 2000,"inflation": 15,"growth": 12}}, { fill: "blue" })
.addSeries("France", {data: {"GDP": 6,"area": 15,"population": 500,"inflation": 5,"growth": 6}}, { fill: "red" })
.addSeries("USA", {data: {"GDP": 3,"area": 20,"population": 1500,"inflation": 10,"growth": 3}}, { fill: "green" })
.addSeries("Japan", {data: {"GDP": 4,"area": 2,"population": 1000,"inflation": 20,"growth": 2}}, { fill: "yellow" })
.addSeries("Korean", {data: {"GDP": 10,"area": 10,"population": 800,"inflation": 2,"growth": 18}}, { fill: "orange" })
.addSeries("Canada", {data: {"GDP": 1,"area": 18,"population": 300,"inflation": 3,"growth": 15}}, { fill: "purple" })
.render();
// 選択可能な凡例の作成
new dojox.charting.widget.SelectableLegend({
chart: chart,
horizontal: false
}, "#{id:legend}");

2013/11/07

© 2013 IBM Corporation

40
例例3:コントロールにないウィジェットの利利⽤用(2)	
  
•  ゲージ(dojox.widget.gauge)

–  例例:アナログ・ゲージ(dojox.widget.AnalogGauge)

•  Dojo のドキュメントにあげられているスピードメーターのサンプルを
XPages に取り込んでみる
–  http://bit.ly/17pnBRz
–  もちろんメーターの範囲や針の初期位置、ゲージのスタイルなどは
パラメータの中で⾃自由にカスタマイズ可能
メーターの針の部分は
ドラッグして動かす
ことが可能	
  

–  Notes/Domino 9.0 の Dojo 1.8.1 では dojox.dgauge という新しい
ゲージコンポーネントもあります
•  http://bit.ly/HQRRsh
2013/11/07

© 2013 IBM Corporation

41
例例3:コントロールにないウィジェットの利利⽤用(2)	
  
<xp:panel id="speedo" dojoType="dojox.widget.AnalogGauge" style="margin:10px">
<xp:this.dojoAttributes>
<xp:dojoAttribute name="width" value="450"></xp:dojoAttribute>
XPages のソース例例
<xp:dojoAttribute name="height" value="300"></xp:dojoAttribute>
<xp:dojoAttribute name="cx" value="225"></xp:dojoAttribute>
(XSP部分)	
  
<xp:dojoAttribute name="cy" value="175"></xp:dojoAttribute>
<xp:dojoAttribute name="radius" value="150"></xp:dojoAttribute>
<xp:dojoAttribute name="startAngle" value="-135"></xp:dojoAttribute>
<xp:dojoAttribute name="endAngle" value="135"></xp:dojoAttribute>
<xp:dojoAttribute name="useRangeStyles" value="0"></xp:dojoAttribute>
<xp:dojoAttribute name="hideValues" value="true"></xp:dojoAttribute>
<xp:dojoAttribute name="color" value="white"></xp:dojoAttribute>
<xp:dojoAttribute name=“majorTicks” value="{length:10, offset:105, interval:10, color:'gray'}"></xp:dojoAttribute>
<xp:dojoAttribute name="minorTicks“ value="{length:5, offset:105, interval:5, color:'gray'}"></xp:dojoAttribute>
</xp:this.dojoAttributes>
<xp:div dojoType="dojox.widget.gauge.Range">
<xp:this.dojoAttributes>
<xp:dojoAttribute name="low" value="0"></xp:dojoAttribute>
<xp:dojoAttribute name="high" value="100"></xp:dojoAttribute>
<xp:dojoAttribute name="color" value="{'color': 'black'}"></xp:dojoAttribute>
</xp:this.dojoAttributes>
</xp:div>
<xp:div dojoType="dojox.widget.gauge.Range">
<xp:this.dojoAttributes>
<xp:dojoAttribute name="low" value="100"></xp:dojoAttribute>
<xp:dojoAttribute name="high" value="200"></xp:dojoAttribute>
<xp:dojoAttribute name="color" value="{'color': 'black'}"></xp:dojoAttribute>
</xp:this.dojoAttributes>
</xp:div>
</xp:panel>
2013/11/07

© 2013 IBM Corporation

42
例例3:コントロールにないウィジェットの利利⽤用(2)	
  
var gauge = dijit.byId('#{id:speedo}');
var fill = {
'type' : 'linear', 'x1' : 50, 'y1' : 50, 'x2' : 350, 'y2' : 350,
XPages のソース例例
'colors' : [
(onClientLoad 時の
{ offset : 0, color : 'black'},
クライアントサイド
{ offset : 0.5, color : 'black'},
JavaScript)	
  
{ offset : 0.75, color : 'yellow'},
{ offset : 1, color : 'red'}
]
};
gauge.addIndicator(new dojox.widget.gauge.AnalogArcIndicator({
'value' : 200, 'width' : 20, 'offset' : 150,
'color' : fill, 'noChange' : true, 'hideValues' : true
}));
gauge.addIndicator(new dojox.widget.gauge.AnalogArcIndicator({
'value' : 80, 'width' : 10, 'offset' : 150,
'color' : 'blue', 'title' : 'Arc', 'hover' : 'Arc: 80'
}));
gauge.addIndicator(new dojox.widget.gauge.AnalogNeedleIndicator({
'value' : 100, 'width' : 8, 'length' : 150,
'color' : 'red', 'title' : 'Needle', 'hover' : 'Needle: 100'
}));

2013/11/07

© 2013 IBM Corporation

43
例例3:コントロールにないウィジェットの利利⽤用(3)	
  
•  描画コントロール(dojox.drawing)

–  例例:お絵かきツール(dojox.drawing.Drawing)

•  Dojo Toolkit の dojox.drawing モジュールの tests フォルダにある
スパイダー・チャートのサンプルの1つを XPage に取り込んでみる
–  http://bit.ly/1cessT9

お絵かきツールで描画
した内容を⽂文書に保存
(描画内容は JSON 形式
でフィールドに保存)	
  
※ drawing のサンプルは、可能性を⽰示すための
実験的なサンプルです。
⼀一部動かない部分などあるかもしれません。	
  
2013/11/07

© 2013 IBM Corporation

44
サンプル NSF
•  ご紹介した活⽤用例例を実装したサンプル NSF は以下の URL
からダウンロードできます。(mydeveloperWorks)
–  http://ibm.co/HPw0lS
•  ダウンロードした ZIP の中の XPagesDay2013-B4-DojoSample.nsf に
ブラウザからアクセスするとサンプルを実際に試すことができます。

–  動作環境

•  Lotus Notes/Domino 8.5.3 + XPages Extension Library or Upgrade Pack
•  IBM Notes/Domino 9.0

2013/11/07

© 2013 IBM Corporation

45
まとめ	
  
•  jQuery と⽐比較しながら Dojo を学ぶことで、Dojo の理理解を
より深めることができます

–  特に API などは⾮非常によく似ているので参考になる場合が多いです

•  XPages で Dojo はいろいろなところで使われているので、
ちょっとした API を利利⽤用するだけで XPages をよりリッチに
することができます
–  dojo コア API、UI コントロールの API など

•  XPages は開発プラットフォームであり、基本的にはいろい
ろな JavaScript ライブラリを使うことが出来ます。今⽇日紹介
した jQuery や Dojo に限らず、いろいろな JavaScript ライ
ブラリを使ってみてください!
–  例例:Ext, Sencha touch など

2013/11/07

© 2013 IBM Corporation

46
ご清聴ありがとうございました	
  

2013/11/07

© 2013 IBM Corporation

47

More Related Content

What's hot

XPagesDay 2013 Closing Session
XPagesDay 2013 Closing SessionXPagesDay 2013 Closing Session
XPagesDay 2013 Closing SessionAtsushi Sato
 
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイドXPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイドTetsuji Hayashi
 
X pages day発表_20141118 final
X pages day発表_20141118 finalX pages day発表_20141118 final
X pages day発表_20141118 finalFumiko Yamamoto
 
XPagesDay 2014【B 1】最新のモバイル ui を瞬時に作成 〜x controlsのご紹介〜
XPagesDay 2014【B 1】最新のモバイル ui を瞬時に作成 〜x controlsのご紹介〜XPagesDay 2014【B 1】最新のモバイル ui を瞬時に作成 〜x controlsのご紹介〜
XPagesDay 2014【B 1】最新のモバイル ui を瞬時に作成 〜x controlsのご紹介〜Mitsuru Katoh
 
What's new of XPages in 2015 and beyond
What's new of XPages in 2015 and beyondWhat's new of XPages in 2015 and beyond
What's new of XPages in 2015 and beyondAtsushi Sato
 
IBM Notes/Domino 9.0.1 アプリケーション開発新機能
IBM Notes/Domino 9.0.1 アプリケーション開発新機能IBM Notes/Domino 9.0.1 アプリケーション開発新機能
IBM Notes/Domino 9.0.1 アプリケーション開発新機能Mitsuru Katoh
 
X pages day2015_みんな大好き@式とbootstrapで作る簡単coolなxpagesアプリ(公開用)
X pages day2015_みんな大好き@式とbootstrapで作る簡単coolなxpagesアプリ(公開用)X pages day2015_みんな大好き@式とbootstrapで作る簡単coolなxpagesアプリ(公開用)
X pages day2015_みんな大好き@式とbootstrapで作る簡単coolなxpagesアプリ(公開用)Tetsuji Hayashi
 
NotesコンソーシアムのXPagesに関する活動のご紹介
NotesコンソーシアムのXPagesに関する活動のご紹介NotesコンソーシアムのXPagesに関する活動のご紹介
NotesコンソーシアムのXPagesに関する活動のご紹介Go Kawakami
 
XPages 開発 Tips 百連発
XPages 開発 Tips 百連発XPages 開発 Tips 百連発
XPages 開発 Tips 百連発Mitsuru Katoh
 
【Xpages day2016】標準コントールを使わないxpage開発
【Xpages day2016】標準コントールを使わないxpage開発【Xpages day2016】標準コントールを使わないxpage開発
【Xpages day2016】標準コントールを使わないxpage開発西 雄樹
 
XPagesDay 2016 - XPages Future Roadmap
XPagesDay 2016 - XPages Future RoadmapXPagesDay 2016 - XPages Future Roadmap
XPagesDay 2016 - XPages Future RoadmapAtsushi Sato
 
Java女子部 Java EEハンズオン(応用編)
Java女子部 Java EEハンズオン(応用編)Java女子部 Java EEハンズオン(応用編)
Java女子部 Java EEハンズオン(応用編)Misaki Kajiura
 
はじめての Azure 開発
はじめての Azure 開発はじめての Azure 開発
はじめての Azure 開発Yoshitaka Seo
 
今日から始める XPages アプリケーション開発!(オープンセミナー 2016 ハンズオン XPagesDay 出張セッション)
今日から始める XPages アプリケーション開発!(オープンセミナー 2016 ハンズオン XPagesDay 出張セッション)今日から始める XPages アプリケーション開発!(オープンセミナー 2016 ハンズオン XPagesDay 出張セッション)
今日から始める XPages アプリケーション開発!(オープンセミナー 2016 ハンズオン XPagesDay 出張セッション)Takeshi Yoshida
 
eZ publish勉強会2013年7月「実装ケーススタディ」
eZ publish勉強会2013年7月「実装ケーススタディ」eZ publish勉強会2013年7月「実装ケーススタディ」
eZ publish勉強会2013年7月「実装ケーススタディ」ericsagnes
 
セッションB1 企業間コラボレーションでつながる!!!XPagesコミュニティ動向(後半)
セッションB1 企業間コラボレーションでつながる!!!XPagesコミュニティ動向(後半)セッションB1 企業間コラボレーションでつながる!!!XPagesコミュニティ動向(後半)
セッションB1 企業間コラボレーションでつながる!!!XPagesコミュニティ動向(後半)Masahiko Sato
 
Windows azureって何
Windows azureって何Windows azureって何
Windows azureって何Kana SUZUKI
 
JSUG 20141127 「Spring Bootを用いたドメイン駆動設計」
JSUG 20141127 「Spring Bootを用いたドメイン駆動設計」JSUG 20141127 「Spring Bootを用いたドメイン駆動設計」
JSUG 20141127 「Spring Bootを用いたドメイン駆動設計」Junichiro Kazama
 
20150829 Java女子部勉強会 Java EEハンズオン
20150829 Java女子部勉強会 Java EEハンズオン20150829 Java女子部勉強会 Java EEハンズオン
20150829 Java女子部勉強会 Java EEハンズオンMisaki Kajiura
 
JAZUG女子部 第2回勉強会 ハンズオン
JAZUG女子部 第2回勉強会 ハンズオンJAZUG女子部 第2回勉強会 ハンズオン
JAZUG女子部 第2回勉強会 ハンズオンKana SUZUKI
 

What's hot (20)

XPagesDay 2013 Closing Session
XPagesDay 2013 Closing SessionXPagesDay 2013 Closing Session
XPagesDay 2013 Closing Session
 
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイドXPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
XPagesDay2014 A-4 XPages with jQueryMobile BADプラクティスガイド
 
X pages day発表_20141118 final
X pages day発表_20141118 finalX pages day発表_20141118 final
X pages day発表_20141118 final
 
XPagesDay 2014【B 1】最新のモバイル ui を瞬時に作成 〜x controlsのご紹介〜
XPagesDay 2014【B 1】最新のモバイル ui を瞬時に作成 〜x controlsのご紹介〜XPagesDay 2014【B 1】最新のモバイル ui を瞬時に作成 〜x controlsのご紹介〜
XPagesDay 2014【B 1】最新のモバイル ui を瞬時に作成 〜x controlsのご紹介〜
 
What's new of XPages in 2015 and beyond
What's new of XPages in 2015 and beyondWhat's new of XPages in 2015 and beyond
What's new of XPages in 2015 and beyond
 
IBM Notes/Domino 9.0.1 アプリケーション開発新機能
IBM Notes/Domino 9.0.1 アプリケーション開発新機能IBM Notes/Domino 9.0.1 アプリケーション開発新機能
IBM Notes/Domino 9.0.1 アプリケーション開発新機能
 
X pages day2015_みんな大好き@式とbootstrapで作る簡単coolなxpagesアプリ(公開用)
X pages day2015_みんな大好き@式とbootstrapで作る簡単coolなxpagesアプリ(公開用)X pages day2015_みんな大好き@式とbootstrapで作る簡単coolなxpagesアプリ(公開用)
X pages day2015_みんな大好き@式とbootstrapで作る簡単coolなxpagesアプリ(公開用)
 
NotesコンソーシアムのXPagesに関する活動のご紹介
NotesコンソーシアムのXPagesに関する活動のご紹介NotesコンソーシアムのXPagesに関する活動のご紹介
NotesコンソーシアムのXPagesに関する活動のご紹介
 
XPages 開発 Tips 百連発
XPages 開発 Tips 百連発XPages 開発 Tips 百連発
XPages 開発 Tips 百連発
 
【Xpages day2016】標準コントールを使わないxpage開発
【Xpages day2016】標準コントールを使わないxpage開発【Xpages day2016】標準コントールを使わないxpage開発
【Xpages day2016】標準コントールを使わないxpage開発
 
XPagesDay 2016 - XPages Future Roadmap
XPagesDay 2016 - XPages Future RoadmapXPagesDay 2016 - XPages Future Roadmap
XPagesDay 2016 - XPages Future Roadmap
 
Java女子部 Java EEハンズオン(応用編)
Java女子部 Java EEハンズオン(応用編)Java女子部 Java EEハンズオン(応用編)
Java女子部 Java EEハンズオン(応用編)
 
はじめての Azure 開発
はじめての Azure 開発はじめての Azure 開発
はじめての Azure 開発
 
今日から始める XPages アプリケーション開発!(オープンセミナー 2016 ハンズオン XPagesDay 出張セッション)
今日から始める XPages アプリケーション開発!(オープンセミナー 2016 ハンズオン XPagesDay 出張セッション)今日から始める XPages アプリケーション開発!(オープンセミナー 2016 ハンズオン XPagesDay 出張セッション)
今日から始める XPages アプリケーション開発!(オープンセミナー 2016 ハンズオン XPagesDay 出張セッション)
 
eZ publish勉強会2013年7月「実装ケーススタディ」
eZ publish勉強会2013年7月「実装ケーススタディ」eZ publish勉強会2013年7月「実装ケーススタディ」
eZ publish勉強会2013年7月「実装ケーススタディ」
 
セッションB1 企業間コラボレーションでつながる!!!XPagesコミュニティ動向(後半)
セッションB1 企業間コラボレーションでつながる!!!XPagesコミュニティ動向(後半)セッションB1 企業間コラボレーションでつながる!!!XPagesコミュニティ動向(後半)
セッションB1 企業間コラボレーションでつながる!!!XPagesコミュニティ動向(後半)
 
Windows azureって何
Windows azureって何Windows azureって何
Windows azureって何
 
JSUG 20141127 「Spring Bootを用いたドメイン駆動設計」
JSUG 20141127 「Spring Bootを用いたドメイン駆動設計」JSUG 20141127 「Spring Bootを用いたドメイン駆動設計」
JSUG 20141127 「Spring Bootを用いたドメイン駆動設計」
 
20150829 Java女子部勉強会 Java EEハンズオン
20150829 Java女子部勉強会 Java EEハンズオン20150829 Java女子部勉強会 Java EEハンズオン
20150829 Java女子部勉強会 Java EEハンズオン
 
JAZUG女子部 第2回勉強会 ハンズオン
JAZUG女子部 第2回勉強会 ハンズオンJAZUG女子部 第2回勉強会 ハンズオン
JAZUG女子部 第2回勉強会 ハンズオン
 

Similar to XPagesDay2013 【B-4】 Dojo 徹底解剖! ~ XPages で Dojo を有効活用するには ~

Intalio japan special cloud workshop
Intalio japan special cloud workshopIntalio japan special cloud workshop
Intalio japan special cloud workshopDaisuke Sugai
 
Visual Studio 2019 / Visual Studio Code + Live Shareではじめるモブ・プログラミング #vs2019
Visual Studio 2019 / Visual Studio Code + Live Shareではじめるモブ・プログラミング #vs2019Visual Studio 2019 / Visual Studio Code + Live Shareではじめるモブ・プログラミング #vs2019
Visual Studio 2019 / Visual Studio Code + Live Shareではじめるモブ・プログラミング #vs2019満徳 関
 
20120512 第5回Zabbix勉強会LT
20120512 第5回Zabbix勉強会LT20120512 第5回Zabbix勉強会LT
20120512 第5回Zabbix勉強会LTKiyoshi Hirose
 
[AWSマイスターシリーズ] Amazon DynamoDB
[AWSマイスターシリーズ] Amazon DynamoDB[AWSマイスターシリーズ] Amazon DynamoDB
[AWSマイスターシリーズ] Amazon DynamoDBAmazon Web Services Japan
 
20140523 jQuery基礎 (HTML5ビギナーズ)
20140523 jQuery基礎 (HTML5ビギナーズ)20140523 jQuery基礎 (HTML5ビギナーズ)
20140523 jQuery基礎 (HTML5ビギナーズ)Daisuke Yamazaki
 
Spath for enterprise
Spath for enterpriseSpath for enterprise
Spath for enterpriseKoichiro Sumi
 
Ride on Azure! 詳細編
Ride on Azure! 詳細編Ride on Azure! 詳細編
Ride on Azure! 詳細編Keiji Kamebuchi
 
おすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップおすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップKoichiro Sumi
 
Softlayer無制限ストレージを ownCloudで使う
Softlayer無制限ストレージを ownCloudで使うSoftlayer無制限ストレージを ownCloudで使う
Softlayer無制限ストレージを ownCloudで使うTetsurou Yano
 
【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)
【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)
【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)Hiroyuki Kusu
 
CEDEC2012 Flashゲームにおけるパフォーマンスチューニングの A to Z
CEDEC2012 Flashゲームにおけるパフォーマンスチューニングの A to ZCEDEC2012 Flashゲームにおけるパフォーマンスチューニングの A to Z
CEDEC2012 Flashゲームにおけるパフォーマンスチューニングの A to ZAndy Demo
 
CEDEC2012 - Flashコンテンツの最適化
CEDEC2012 - Flashコンテンツの最適化CEDEC2012 - Flashコンテンツの最適化
CEDEC2012 - Flashコンテンツの最適化Andy Hall
 
20130203 OSS-DB Exam Silver 技術解説無料セミナー
20130203 OSS-DB Exam Silver 技術解説無料セミナー20130203 OSS-DB Exam Silver 技術解説無料セミナー
20130203 OSS-DB Exam Silver 技術解説無料セミナーKazuko Itoda
 
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-Hiroki Kondo
 
eZ Publish 2012年4月勉強会 - eZ Publish設計ベストプラクティス
eZ Publish 2012年4月勉強会 - eZ Publish設計ベストプラクティスeZ Publish 2012年4月勉強会 - eZ Publish設計ベストプラクティス
eZ Publish 2012年4月勉強会 - eZ Publish設計ベストプラクティスericsagnes
 
JavaScriptと共に歩いて行く決意をした君へ
JavaScriptと共に歩いて行く決意をした君へJavaScriptと共に歩いて行く決意をした君へ
JavaScriptと共に歩いて行く決意をした君へMuyuu Fujita
 
プロ文.com 勉強会 Phase 1
プロ文.com 勉強会 Phase 1プロ文.com 勉強会 Phase 1
プロ文.com 勉強会 Phase 1Hiroki Toyokawa
 

Similar to XPagesDay2013 【B-4】 Dojo 徹底解剖! ~ XPages で Dojo を有効活用するには ~ (20)

Intalio japan special cloud workshop
Intalio japan special cloud workshopIntalio japan special cloud workshop
Intalio japan special cloud workshop
 
Visual Studio 2019 / Visual Studio Code + Live Shareではじめるモブ・プログラミング #vs2019
Visual Studio 2019 / Visual Studio Code + Live Shareではじめるモブ・プログラミング #vs2019Visual Studio 2019 / Visual Studio Code + Live Shareではじめるモブ・プログラミング #vs2019
Visual Studio 2019 / Visual Studio Code + Live Shareではじめるモブ・プログラミング #vs2019
 
20120512 第5回Zabbix勉強会LT
20120512 第5回Zabbix勉強会LT20120512 第5回Zabbix勉強会LT
20120512 第5回Zabbix勉強会LT
 
Djangoのススメ
DjangoのススメDjangoのススメ
Djangoのススメ
 
[AWSマイスターシリーズ] Amazon DynamoDB
[AWSマイスターシリーズ] Amazon DynamoDB[AWSマイスターシリーズ] Amazon DynamoDB
[AWSマイスターシリーズ] Amazon DynamoDB
 
20140523 jQuery基礎 (HTML5ビギナーズ)
20140523 jQuery基礎 (HTML5ビギナーズ)20140523 jQuery基礎 (HTML5ビギナーズ)
20140523 jQuery基礎 (HTML5ビギナーズ)
 
Spath for enterprise
Spath for enterpriseSpath for enterprise
Spath for enterprise
 
Ride on Azure! 詳細編
Ride on Azure! 詳細編Ride on Azure! 詳細編
Ride on Azure! 詳細編
 
おすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップおすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップ
 
Softlayer無制限ストレージを ownCloudで使う
Softlayer無制限ストレージを ownCloudで使うSoftlayer無制限ストレージを ownCloudで使う
Softlayer無制限ストレージを ownCloudで使う
 
【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)
【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)
【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)
 
CEDEC2012 Flashゲームにおけるパフォーマンスチューニングの A to Z
CEDEC2012 Flashゲームにおけるパフォーマンスチューニングの A to ZCEDEC2012 Flashゲームにおけるパフォーマンスチューニングの A to Z
CEDEC2012 Flashゲームにおけるパフォーマンスチューニングの A to Z
 
CEDEC2012 - Flashコンテンツの最適化
CEDEC2012 - Flashコンテンツの最適化CEDEC2012 - Flashコンテンツの最適化
CEDEC2012 - Flashコンテンツの最適化
 
20130203 oss-db-lpi
20130203 oss-db-lpi20130203 oss-db-lpi
20130203 oss-db-lpi
 
20130203 OSS-DB Exam Silver 技術解説無料セミナー
20130203 OSS-DB Exam Silver 技術解説無料セミナー20130203 OSS-DB Exam Silver 技術解説無料セミナー
20130203 OSS-DB Exam Silver 技術解説無料セミナー
 
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
 
eZ Publish 2012年4月勉強会 - eZ Publish設計ベストプラクティス
eZ Publish 2012年4月勉強会 - eZ Publish設計ベストプラクティスeZ Publish 2012年4月勉強会 - eZ Publish設計ベストプラクティス
eZ Publish 2012年4月勉強会 - eZ Publish設計ベストプラクティス
 
Google Product
Google ProductGoogle Product
Google Product
 
JavaScriptと共に歩いて行く決意をした君へ
JavaScriptと共に歩いて行く決意をした君へJavaScriptと共に歩いて行く決意をした君へ
JavaScriptと共に歩いて行く決意をした君へ
 
プロ文.com 勉強会 Phase 1
プロ文.com 勉強会 Phase 1プロ文.com 勉強会 Phase 1
プロ文.com 勉強会 Phase 1
 

XPagesDay2013 【B-4】 Dojo 徹底解剖! ~ XPages で Dojo を有効活用するには ~

  • 1. 【B-4】Dojo 徹底解剖! 〜~ XPages で Dojo を有効活⽤用するには?  〜~   ⽇日本アイ・ビー・エム株式会社 東京ソフトウェア開発研究所 ⼩小野  充志 2013/11/07 © 2013 IBM Corporation 1
  • 2. 特記事項   •  本資料料の記載内容は私個⼈人の⾒見見解であり、必ずしも所属する企業の⽴立立場、 戦略略、意⾒見見を代表するものではありません。 •  本資料料の記載内容は、できる限り正確を期すよう努めてはおりますが、 いかなる明⽰示または暗黙の保証も責任も負いかねます。 •  本資料料の情報は、使⽤用先の責任において使⽤用されるべきものであること を、あらかじめご了了承ください。 •  掲載情報は不不定期に変更更されることもあります。他のメディア等に無断 で転載する事はご遠慮ください。 •  当資料料をコピー等で複製することは、執筆者の承諾諾なしではできません。 •  また、当資料料に記載された製品名または会社名はそれぞれの各社の商標 または登録商標です。 IBM、IBMロゴ、DB2、Lotus、Lotus  Notes、Lotus  Domino、Quickr、Sametime、Workplace、WebSphereは、International  Business  Machines  Corporationの⽶米国およびその他の国における商標。   JavaおよびすべてのJava関連の商標およびロゴは  Sun  Microsystems,  Inc.の⽶米国およびその他の国における商標。   Microsoft,  Windowsは  Microsoft  Corporationの⽶米国およびその他の国における商標。   Linuxは、Linus  Torvaldsの⽶米国およびその他の国における商標。   他の会社名、製品名およびサービス名等は、それぞれ各社の商標。   2013/11/07 © 2013 IBM Corporation 2
  • 3. ⾃自⼰己紹介   •  名前:⼩小野  充志(おの  あつし) •  所属:⽇日本アイ・ビー・エム •  Twitter:@onoat(pizza bot) •  XPages および Dojo と私: –  ICS (Lotus) BPTE チームに所属 •  技術⽀支援活動を通じて XPages および Dojo と出会う –  その後社内の Dojo Mobile 開発プロジェクトチームへ •  本家 Dojo Mobile へ少しだけコントリビュート –  現在は ECM 製品開発チームに所属 •  Dojo を使った UI 開発 –  ICS コミュニティー活動は現在も継続中 •  テクてく Lotus 技術者夜会  開発者編 •  XPages Extension Library Japan チーム   2013/11/07 © 2013 IBM Corporation 3
  • 4. アンケート   •  「はい」の⽅方は、Web ミーティング画⾯面左上にある「挙 ⼿手」アイコンをクリックしてください。 練習:まずは皆さん「挙⼿手」してみてください   質問1: jQuery を使ったことがありますか?   質問2: Dojo を使ったことがありますか?   2013/11/07 © 2013 IBM Corporation 4
  • 5. 背景   •  技術者 xxx ⼈人に聞きました –  Q: 「Dojo をどう思いますか?」 –  A: なんとかしない と!   参考資料料が少ない。特に⽇日本語。   勉強してはみたものの難しい。   Dojo?  やっぱり jQuery でしょ!   2013/11/07 © 2013 IBM Corporation 5
  • 6. 背景   •  イケヤマくんにも相談しました   Dojo のことはキライでも XPages のことはキライに ならないでください!   じぇじぇじぇ!   2013/11/07 jQuery? 倍返しだ!!   Dojo いつやるの? 今でしょ!!   © 2013 IBM Corporation 6
  • 7. 本セッションの⽬目的   •  Dojo 単体として機能紹介するのではなく、jQuery と⽐比較 しながら徹底解剖 –  「難しい」といわれる原因を探る –  よく知られた jQuery と⽐比較することで理理解を助ける –  似た機能を⼀一緒に覚えられるので⼀一⽯石⼆二⿃鳥!   ※ ただし講師も jQuery 初⼼心者なのでご助⾔言等お願いいたします •  ⽐比較を通じて学んだ Dojo の機能を XPages で利利⽤用すること で、リッチなアプリケーションを開発するためのさらなる 選択肢を提供 –  Dojo、jQuery、そしてその他 JavaScript ライブラリ全般に興味を もっていただくきっかけとなれば幸いです   2013/11/07 © 2013 IBM Corporation 7
  • 8. アジェンダ   •  jQuery との⽐比較による Dojo 徹底解剖 •  XPages でより Dojo を有効活⽤用するには? 2013/11/07 © 2013 IBM Corporation 8
  • 9. jQuery との⽐比較による Dojo 徹底解剖   2013/11/07 © 2013 IBM Corporation 9
  • 10. jQuery と Dojo •  オープンソースの JavaScript ライブラリ –  jQuery •  http://jquery.com/ •  最新バージョンは 1.10.2 および 2.0.3 –  Dojo (正式名称は Dojo Toolkit) •  http://dojotoolkit.org/ •  最新バージョンは 1.9.1 (2.x ストリームも開発予定) •  ともにWeb アプリケーション開発を効率率率化するための機能 を提供 –  クロスブラウザ対応 –  DOM操作の簡易易化 –  イベント処理理、アニメーション、AJAX、などなど   2013/11/07 © 2013 IBM Corporation 10
  • 11. jQuery と Dojo の⽐比較   •  ポイントをピックアップして⽐比較 –  機能概要⽐比較 •  モジュール構成 •  HTMLへのロード⽅方法 •  基本コンセプト –  機能詳細⽐比較 •  コア API •  UI ウィジェット 2013/11/07 © 2013 IBM Corporation 11
  • 12. jQuery と Dojo の⽐比較   •  ポイントをピックアップして⽐比較 –  機能概要⽐比較 •  モジュール構成 •  HTMLへのロード⽅方法 •  基本コンセプト –  機能詳細⽐比較 •  コア API •  UI ウィジェット 2013/11/07 © 2013 IBM Corporation 12
  • 13. jQuery:モジュール構成   •  コアモジュールは js ファイル1つだけ –  圧縮版と⾮非圧縮版を提供 シンプル!   •  開発時には⾮非圧縮版が便便利利。 •  ユーザーがビルドして圧縮版を作るケースはあまりない(?) –  例例:バージョン 1.10.1 の場合 •  圧縮版:  jquery-1.10.1-min.js •  ⾮非圧縮版:  jquery-1.10.1.js •  各プラグインの js ファイルおよび css ファイル –  例例:jQuery UI のすべてのプラグインを利利⽤用する場合 •  js ファイル(⾮非圧縮版) –  jquery-ui.js •  css ファイル(※ ダウンロードの際にテーマを選べる) –  jquery.ui.all.css •  i18n ファイル(ある場合のみ。jQuery UI の場合は datepicker ⽤用) –  jquery-ui-i18n.js 2013/11/07 © 2013 IBM Corporation 13
  • 14. jQuery:HTMLへのロード⽅方法   •  コアモジュールおよび必要なプラグインの js ファイル・ css ファイルを script タグ・link タグで読み込む •  あとは JavaScript で jQuery API を呼び出すだけ <link rel="stylesheet" href="themes/base/jquery.ui.all.css"/> <script src="jquery-1.10.1.js"></script> <script src="jquery-ui.js"></script> <script src="jquery-ui-i18n.js"></script> <script> $(function() { $("#effect").addClass("newClass"); }); </script> とてもシンプルでわかりやすい! でもプラグインがたくさんあるとき は少し⼤大変?   2013/11/07 © 2013 IBM Corporation 14
  • 15. jQuery:基本コンセプト   •  「write less, do more」 シンプルでクール!   –  $ で jQuery にアクセス –  メソッドをつなげて記述する「メソッドチェーン」 •  コアモジュールは軽量量で⾼高速 –  必要最低限の機能のみ •  DOM 操作、イベント処理理、AJAX、アニメーション、など •  プラグインの仕組みにより拡張が容易易 –  jQuery グローバルオブジェクトを拡張 –  UI ウィジェットも jQuery UI というプラグインとして提供 •  セレクタでの DOM ノード選択が強⼒力力でよく使われる –  例例:class が “red” の div すべての背景を⾚赤にして表⽰示   $("div.red").css("background-color", "red").show(); セレクタでのノード選択   2013/11/07 メソッドチェーン   © 2013 IBM Corporation 15
  • 16. Dojo:モジュール構成   •  ダウンロードしたモジュールの中に3つのパッケージが同梱されている –  dojo:コア機能のパッケージ –  dijit:UI ウィジェットパッケージ –  dojox:拡張機能や実験段階機能をまとめたパッケージ なんか ややこしい?   •  コアモジュールの本体は dojo パッケージの dojo.js •  その他のモジュールは、必要になったときに JavaScript でロードする –  例例:dijit.Calendar モジュールを使いたい場合 •  dojo.require(“dijit.Calendar”) •  require([“dijit/Calendar”], function(Calendar){ … }) (1.7 以降降の AMD ⽅方式) –  ロードのたびにリクエストが⾶飛ぶので、本番環境などではビルドして1つの js にまとめるとパフォーマンスが向上 •  それぞれのパッケージやモジュールに css ファイルも⽤用意されている –  dojo:dojo/resources/dojo.css –  dijit:dijit/themes/claro/claro.css (claro テーマの場合)   2013/11/07 © 2013 IBM Corporation 16
  • 17. (参考)AMD •  AMD: Asynchronous Module Definition –  参考資料料(⽇日本語) •  Dojo道場  〜~  第11回「Dojo 最新動向 - Asynchronous Module Definition」 –  http://codezine.jp/article/detail/6482 –  CommonJS という JavaScript 標準化グループによって提唱 •  http://www.commonjs.org/ –  require によってモジュールをロードした際に⾮非同期にロード処理理を⾏行行うこと で⾼高速化 •  http://wiki.commonjs.org/wiki/Modules/AsynchronousDefinition –  さまざまな JavaScript ライブラリがこの標準に対応してきている •  dojo では 1.7 から対応(ローダーとロードされる側両⽅方) •  jQuery も 1.7 から対応(ロードされる側のみ。ローダーはなし。) –  コードの書き⽅方が変わる •  旧: dojo.require(“dijit.Calendar”) •  新: require([“dijit/Calendar”], function(Calendar){ ….. }); –  9.0 現在 XPages では互換性のため同期ロードを使⽤用   2013/11/07 © 2013 IBM Corporation さらに 複雑に... 17
  • 18. Dojo:HTMLへのロード⽅方法   •  コアモジュールである dojo.js および必要な css ファイルを script タグ・link タグで読み込む –  data-dojo-config 属性で load 時にパラメータを渡すことも可能 •  あとは JavaScript で dojo API を呼び出すだけ   <link rel="stylesheet" href="dojo/resources/dojo.css"> <link rel="stylesheet" href="dijit/themes/claro/claro.css"> <script src="dojo/dojo.js" data-dojo-config="parseOnLoad:false"></script> <script> dojo.ready(function(){ dojo.addClass(dojo.byId("effect"), "newClass"); }); </script> ※ このページも含め、以下コード例例は すべて、先ほど紹介した AMD を使わ ない形式で紹介します   2013/11/07 コードの構成は jQuery と ほとんど同じで⽐比較的 シンプル!   © 2013 IBM Corporation 18
  • 19. Dojo:基本コンセプト(1)   •  とくにキャッチフレーズはない(?) •  コアモジュールは軽量量 難解にみえるが ⼤大規模開発では 有効!   –  しかし jQuery のコアモジュールにはない機能がいくつかある •  モジュール・フレームワーク –  モジュールの定義  (dojo.provide or define) –  モジュールのロード(dojo.require or require (AMD)) –  継承の仕組み (dojo.declare) これは •  国際化、アクセシビリティ  など ありがたい!   •  モジュールを開発することで拡張が可能 –  dojo プロジェクトの中で開発されている拡張機能は dojox などの モジュールにほとんど同梱されている •  jQuery でいうところのプラグインのようなリリースサイクルに関する ⾃自由度度がない –  別パッケージとしてモジュールを開発しているものもある •  例例:gridx プロジェクト  https://github.com/oria/gridx/ 2013/11/07 © 2013 IBM Corporation 19
  • 20. Dojo:基本コンセプト(2)   •  jQuery でよく取り上げられるセレクタによる DOM ノード 選択機能は dojo にもある –  dojo.query() –  でも普及度度はいま⼀一歩 セレクタでのノード選択   dojo.query はメソッド チェーンに対応している が、dojo 全般としては対 応していない API が多い。   dojo.query("div.red").style("backgroundColor", "red"); もしくは   dojo.query("div.red").forEach(function(node){ dojo.style(node, "backgroundColor", "red"); }); メソッドチェーンを使わない書き⽅方。 コードは少し⻑⾧長くなるけど結果は同じ。   2013/11/07 © 2013 IBM Corporation 20
  • 21. 機能概要⽐比較のまとめ   シンプルさは jQuery!   jQuery Dojo いい ところ   •  コンセプトがシンプル •  デザイナーにも優しい強⼒力力 なセレクタ機能 → デザイナーツールにも採⽤用 •  jQuery を使ったツールやア プリが沢⼭山ある   •  多機能 •  モジュールを継承した開発 のしやすさ(Java に近い) •  国際化、アクセシビリティ なども標準サポート   気になる ところ   •  ⼤大規模開発ではどう? •  いろいろなプラグインを利利 ⽤用する際のリスクは?   •  多機能すぎてコンセプトが 複雑 向いていそ •  まさにライブラリ うなケース   •  デザインを中⼼心とした開発 •  Web サイト開発、中⼩小規模 Web アプリ開発?   2013/11/07 © 2013 IBM Corporation •  ライブラリというよりはフ レームワーク •  アクセシビリティなどの要 件が必須の場合 •  ⼤大規模 Web アプリ開発? 21
  • 22. jQuery と Dojo の⽐比較   •  ポイントをピックアップして⽐比較 –  機能概要⽐比較 •  モジュール構成 •  HTMLへのロード⽅方法 •  基本コンセプト –  機能詳細⽐比較 •  コア API •  UI ウィジェット •  モバイル 2013/11/07 © 2013 IBM Corporation 22
  • 23. コア API 詳細⽐比較   •  jQuery のコア API –  –  –  –  –  –  –  セレクタ DOM 操作 Ajax イベント アニメーション Deferred … •  Dojo のコア API –  –  –  –  –  dojo.query dojo.addClass, dojo.style, etc dojo.xhr, dojo.xhrGet, etc dojo.connect / dojo.on dojo.fadeIn, dojo.animateProperty, etc –  dojo.Deferred –  dojo.dnd (ドラッグ&ドロップ)   コアのAPIレベルでの機能 はほぼ同じ!   2013/11/07 © 2013 IBM Corporation 23
  • 24. コアAPI:セレクタ、DOM操作   •  例例:td タグ直下の div でクラスが red のものの背景を⾚赤に <div class="red">a</div> <table><tbody><tr> <td><div class="red">b</div></td> <td><div class="blue">c</div></td> </tr></tbody></table> –  jQuery $("td > div.red").css("background-color", "red"); –  Dojo dojo.query("td > div.red").style("backgroundColor", "red"); dojo.query("td > div.red").forEach(function(node){ dojo.style(node, "backgroundColor", "red"); }); 2013/11/07 © 2013 IBM Corporation 24
  • 25. コアAPI:AJAX •  例例:サーバーの message.txt ファイルを読み込んで表⽰示 –  jQuery $.get("message.txt", function(data){ $("#messages").html(data); }); –  Dojo dojo.xhrGet({ url: "message.txt", handleAs: "text", load: function(data){ dojo.byId("messages").innerHTML = data; } }); 2013/11/07 © 2013 IBM Corporation 25
  • 26. コアAPI:アニメーション   •  例例:イメージ(id == pizza)をフェードインアニメーション で表⽰示 –  jQuery $("#pizza").fadeIn(1000); –  Dojo dojo.fadeIn({ node: "pizza", duration: 1000 }).play(); (参考)Dojo道場  〜~  第5回「アニメーションを使いこな す」                 http://codezine.jp/article/detail/5759 2013/11/07 © 2013 IBM Corporation 26
  • 27. UI ウィジェット詳細⽐比較   •  jQuery UI のウィジェット –  –  –  –  –  –  –  –  –  –  –  アコーディオン オートコンプリート ボタン ⽇日付ピッカー ダイアログ メニュー プログレスバー スライダー 数値スピナー タブ ツールチップ •  Dojo ウィジェット –  –  –  –  –  –  –  –  –  –  –  dijit.layout.AccordionContainer dijit.form.ComboBox dijit.form.Button dijit.form.DateTextBox dijit.Dialog dijit.Menu dijit.ProgressBar dijit.form.HorizontalSlider dijit.form.NumberSpinner dijit.form.TabContainer dijit.Tooltip UI ウィジェットも ほぼ同じ機能をもっている!   2013/11/07 © 2013 IBM Corporation 27
  • 28. ⽐比較のまとめ   •  コンセプトレベル –  jQuery はシンプルでわかりやすいが、Dojo は「クセ」がある •  機能が⾜足りないわけではなく、むしろ多機能すぎるため •  うまく「クセ」をふりはらって適材適所での利利⽤用を! •  API レベル –  コア API、UI ウィジェットともに、それほど⼤大きな差異異はない –  jQuery と⾮非常に似ているので、jQuery での同じ機能について⼀一緒に 調べることで Dojo の機能についても理理解できる場合がある •  例例:Deferred –  Dojo の Deferred で検索索しても⽇日本語情報はほとんど出てこないが、 jQuery の Deferred について検索索すると⽇日本語資料料が多く⾒見見つかる XPages のセッションの中ではこれまであまりとりあげられなかった コア API にも是⾮非注⽬目してみてください!   2013/11/07 © 2013 IBM Corporation 28
  • 29. あれ、⽇日本語資料料の問題は?   •  今あるものをいくつかピックアップしておきます –  テクてく Lotus 技術者夜会  2011/01/21  Dojo Toolkit 概要 •  https://www.ibm.com/developerworks/community/files/app?lang=ja#/ collection/46fe748d-f171-4c53-9afd-41aa95393682 –  「Dojo道場」〜~実⽤用アプリ構築のためのベストプラクティス •  http://codezine.jp/article/corner/397 •  英語ですが API ドキュメントなどは重宝します –  Dojo Toolkit API Documentation •  http://dojotoolkit.org/api/ –  Dojo Toolkit Documentation •  http://dojotoolkit.org/documentation/ •  是⾮非コミュニティーの皆さまのお⼒力力をお貸しください!   2013/11/07 © 2013 IBM Corporation 29
  • 30. XPages でより Dojo を有効活⽤用するには?   2013/11/07 © 2013 IBM Corporation 30
  • 31. XPages と Dojo •  XPages と Dojo の相性はとてもいい –  なにもしなくても dojo がページにロードされている –  Dojo のビルドなどを気にしなくても CSS や JavaScript を集約する機 能が XPages にはついている(※ Notes/Domion 8.5.3 以降降) –  Dojo のモジュールをロードするための resources プロパティもある Dojo の「クセ」の部分をかなり隠蔽してくれている   •  Notes/Domino のバージョンによって Dojo のバージョンが 変わる点にはご注意ください Notes/Domino 8.5 8.5.1 8.5.2 8.5.3 9.0 9.0.1 Dojo Toolkit 1.1.1 1.3.2 1.4.3 1.6.1 1.8.1 1.8.3 2013/11/07 © 2013 IBM Corporation 31
  • 32. XPages で Dojo をより有効活⽤用するには?   •  Dojo のコア API を使ってみましょう –  これまで XPages の技術セッションではあまり API は紹介されず、 Dojo = UI ウィジェットとして紹介する機会が多かったのですが、 今回のセッションを機会に Dojo の API を使ってみましょう! •  XPages のコントロールの中で使われている Dojo の UI ウィ ジェットの API を呼び出してみましょう –  特に XPages Extension Library には Dojo の UI ウィジェットをその ままコントロール化したものが多いため、それらの UI ウィジェット の API を呼び出すことでさまざまな拡張ができます •  XPages のコントロールにはない UI ウィジェットの利利⽤用も もちろん有効です –  Dojo にはまだまだおもしろい UI ウィジェットがたくさんあります!   2013/11/07 © 2013 IBM Corporation 32
  • 33. XPages での Dojo 活⽤用例例   •  例例1:Dojo コア API の利利⽤用 –  セレクタ(dojo.query) •  [参考]: XPagesのRadio Button Groupから選択された値をクライアント Javascriptで取得する⽅方法 –  http://bit.ly/18iPXrq –  アニメーション(dojo.animateProperty) –  ドラッグ&ドロップ (dojo.dnd) •  例例2:コントロールの中で使われている Dojo ウィジェットに API を 使ってアクセス –  タブ・コンテナーのタブの選択 –  アコーディオン・コンテナーのペインを開く(アニメーション付) •  例例3:コントロールには使われていない Dojo ウィジェットを利利⽤用 –  チャート(dojox.charting) –  ゲージ(dojox.widget.gauge) –  描画ウィジェット(dojox.drawing)※ Experimental 2013/11/07 © 2013 IBM Corporation 33
  • 34. 例例1:Dojo コア API の利利⽤用(1)   •  セレクタ(dojo.query) –  例例:表の列列・⾏行行の選択 •  カラーパレットで指定した⾊色で表の列列・⾏行行を選択して塗りつぶし   あらかじめ表のセルに何⾏行行何列列か分かるよ うなスタイルクラスを設定しておく 例例: <tr class=“row1”><td class=“col1”>… 列列選択   dojo.query("td.col3").style("backgroundColor", dijit.byId("#{id:palette}").get("value") || "red"); ⾏行行選択   dojo.query(“tr.row3 td").style("backgroundColor", dijit.byId("#{id:palette}").get("value") || "red"); 2013/11/07 © 2013 IBM Corporation 34
  • 35. 例例1:Dojo コア API の利利⽤用(2)   •  アニメーション(dojo.animateProperty) –  Extension Library のサンプル NSF にもいろいろ例例が載っています •  http://www.xpages.jp/xpagesext.nsf/Core_DojoEffects.xsp –  例例:スライダーで指定した倍率率率にイメージを拡⼤大縮⼩小スライダーには Extension Library の「Dojo Horizontal Slider」を使⽤用 •  スライダーの onChange イベントで dojo.animateProperty を使⽤用し、 指定された倍率率率にイメージをアニメーション付きで拡⼤大縮⼩小する イメージをアニメーション 付きで拡⼤大   2013/11/07 var ratio = thisEvent; // Slider で指定された倍率 dojo.animateProperty({ node: "#{id:logo}", properties: { width: 149 * ratio, height: 33 * ratio }, duration: 1000 }).play(); © 2013 IBM Corporation 35
  • 36. 例例1:Dojo コア API の利利⽤用(3)   •  ドラッグ&ドロップ(dojo.dnd) –  例例:ドラッグ&ドロップで移動可能な「メモ」を作成する •  dojo.dnd.Moveable モジュールを利利⽤用 –  ノードをドラッグ&ドロップで移動可能にしてくれる   var textarea = dojo.byId("#{id:inputTextarea1}"); メモ内容を⼊入⼒力力してボタンを 押すと、ドラッグ&ドロップ で移動可能なメモを作成   ※ 保存の処理理は実装していないので、 リロードするとメモは消えます   2013/11/07 // メモの div ノードを作成して body に追加 var memoNode = dojo.create("div", { innerHTML: textarea.value, style: { position: "absolute", top: "80px", left: "10px", width: "100px", height: "100px", backgroundColor: "lightyellow", border: "1px solid #CCCCCC" } }, dojo.body()); // Moveable を作成してドラッグ&ドロップ可能に new dojo.dnd.Moveable(memoNode); © 2013 IBM Corporation 36
  • 37. 例例2:コントロールの中のウィジェットの API を利利⽤用(1)   •  タブ・コンテナーのタブの選択 –  Extension Library の「Dojo Tab Container」「Dojo Tab Pane」を 使って作成したタブを、API を使ってプログラムで選択する •  dijit.byId(id): id で指定されたウィジェットを取得する •  <TabContainer>.selectChild(<TabPane>):  指定された TabPane を開く   ボタンを押すと対応するタブが開く   dijit.byId("#{id:djTabContainer1}") .selectChild(dijit.byId("#{id:djTabPane2}")); 2013/11/07 © 2013 IBM Corporation 37
  • 38. 例例2:コントロールの中のウィジェットの API を利利⽤用(2)   •  アコーディオン・コンテナーのペインを開く –  Extension Library の「Dojo Accordion Container」「Dojo Accordion Pane」を使って作成したアコーディオンのペインを、API を使って プログラムで開く •  <AccordionContainer>.selectChild(<AccordionPane>, true): 指定された AccordionPane をアニメーション付きで開く。第2引数の true を省省略略するとアニメーションなしで開く。 ボタンを押すと対応するペインが アニメーション付きで開く   dijit.byId("#{id:djAccordionContainer1}") .selectChild(dijit.byId("#{id:djAccordionPane2}"), true); 2013/11/07 © 2013 IBM Corporation 38
  • 39. 例例3:コントロールにないウィジェットの利利⽤用(1)   •  チャート(dojox.charting) –  例例:スパイダー・チャート(dojox.charting.plot2d.Spider) •  Dojo Toolkit の dojox.charting モジュールの tests フォルダにある スパイダー・チャートのサンプルの1つを XPage に取り込んでみる –  http://bit.ly/19Umecc •  easing アニメーション 付きで表⽰示 •  凡例例で選択したものだけ をフィルター表⽰示   –  他にもたくさんのチャートが⽤用意されています!   2013/11/07 © 2013 IBM Corporation 39
  • 40. 例例3:コントロールにないウィジェットの利利⽤用(1)   // Spider チャートの生成(データは固定) var chart = new dojox.charting.Chart("#{id:spiderChart}") .setTheme(dojox.charting.themes.PlotKit.blue) XPages のソース例例 .addPlot("default", { (onClientLoad 時の type: "Spider", クライアントサイド labelOffset: -10, divisions: 7, JavaScript)   axisColor: "lightgray", spiderColor: "silver", seriesFillAlpha: 0.2, spiderOrigin: 0.16, markerSize: 3, precision: 0, spiderType: "polygon" }) .addSeries("China", {data: {"GDP": 2,"area": 6,"population": 2000,"inflation": 15,"growth": 12}}, { fill: "blue" }) .addSeries("France", {data: {"GDP": 6,"area": 15,"population": 500,"inflation": 5,"growth": 6}}, { fill: "red" }) .addSeries("USA", {data: {"GDP": 3,"area": 20,"population": 1500,"inflation": 10,"growth": 3}}, { fill: "green" }) .addSeries("Japan", {data: {"GDP": 4,"area": 2,"population": 1000,"inflation": 20,"growth": 2}}, { fill: "yellow" }) .addSeries("Korean", {data: {"GDP": 10,"area": 10,"population": 800,"inflation": 2,"growth": 18}}, { fill: "orange" }) .addSeries("Canada", {data: {"GDP": 1,"area": 18,"population": 300,"inflation": 3,"growth": 15}}, { fill: "purple" }) .render(); // 選択可能な凡例の作成 new dojox.charting.widget.SelectableLegend({ chart: chart, horizontal: false }, "#{id:legend}"); 2013/11/07 © 2013 IBM Corporation 40
  • 41. 例例3:コントロールにないウィジェットの利利⽤用(2)   •  ゲージ(dojox.widget.gauge) –  例例:アナログ・ゲージ(dojox.widget.AnalogGauge) •  Dojo のドキュメントにあげられているスピードメーターのサンプルを XPages に取り込んでみる –  http://bit.ly/17pnBRz –  もちろんメーターの範囲や針の初期位置、ゲージのスタイルなどは パラメータの中で⾃自由にカスタマイズ可能 メーターの針の部分は ドラッグして動かす ことが可能   –  Notes/Domino 9.0 の Dojo 1.8.1 では dojox.dgauge という新しい ゲージコンポーネントもあります •  http://bit.ly/HQRRsh 2013/11/07 © 2013 IBM Corporation 41
  • 42. 例例3:コントロールにないウィジェットの利利⽤用(2)   <xp:panel id="speedo" dojoType="dojox.widget.AnalogGauge" style="margin:10px"> <xp:this.dojoAttributes> <xp:dojoAttribute name="width" value="450"></xp:dojoAttribute> XPages のソース例例 <xp:dojoAttribute name="height" value="300"></xp:dojoAttribute> <xp:dojoAttribute name="cx" value="225"></xp:dojoAttribute> (XSP部分)   <xp:dojoAttribute name="cy" value="175"></xp:dojoAttribute> <xp:dojoAttribute name="radius" value="150"></xp:dojoAttribute> <xp:dojoAttribute name="startAngle" value="-135"></xp:dojoAttribute> <xp:dojoAttribute name="endAngle" value="135"></xp:dojoAttribute> <xp:dojoAttribute name="useRangeStyles" value="0"></xp:dojoAttribute> <xp:dojoAttribute name="hideValues" value="true"></xp:dojoAttribute> <xp:dojoAttribute name="color" value="white"></xp:dojoAttribute> <xp:dojoAttribute name=“majorTicks” value="{length:10, offset:105, interval:10, color:'gray'}"></xp:dojoAttribute> <xp:dojoAttribute name="minorTicks“ value="{length:5, offset:105, interval:5, color:'gray'}"></xp:dojoAttribute> </xp:this.dojoAttributes> <xp:div dojoType="dojox.widget.gauge.Range"> <xp:this.dojoAttributes> <xp:dojoAttribute name="low" value="0"></xp:dojoAttribute> <xp:dojoAttribute name="high" value="100"></xp:dojoAttribute> <xp:dojoAttribute name="color" value="{'color': 'black'}"></xp:dojoAttribute> </xp:this.dojoAttributes> </xp:div> <xp:div dojoType="dojox.widget.gauge.Range"> <xp:this.dojoAttributes> <xp:dojoAttribute name="low" value="100"></xp:dojoAttribute> <xp:dojoAttribute name="high" value="200"></xp:dojoAttribute> <xp:dojoAttribute name="color" value="{'color': 'black'}"></xp:dojoAttribute> </xp:this.dojoAttributes> </xp:div> </xp:panel> 2013/11/07 © 2013 IBM Corporation 42
  • 43. 例例3:コントロールにないウィジェットの利利⽤用(2)   var gauge = dijit.byId('#{id:speedo}'); var fill = { 'type' : 'linear', 'x1' : 50, 'y1' : 50, 'x2' : 350, 'y2' : 350, XPages のソース例例 'colors' : [ (onClientLoad 時の { offset : 0, color : 'black'}, クライアントサイド { offset : 0.5, color : 'black'}, JavaScript)   { offset : 0.75, color : 'yellow'}, { offset : 1, color : 'red'} ] }; gauge.addIndicator(new dojox.widget.gauge.AnalogArcIndicator({ 'value' : 200, 'width' : 20, 'offset' : 150, 'color' : fill, 'noChange' : true, 'hideValues' : true })); gauge.addIndicator(new dojox.widget.gauge.AnalogArcIndicator({ 'value' : 80, 'width' : 10, 'offset' : 150, 'color' : 'blue', 'title' : 'Arc', 'hover' : 'Arc: 80' })); gauge.addIndicator(new dojox.widget.gauge.AnalogNeedleIndicator({ 'value' : 100, 'width' : 8, 'length' : 150, 'color' : 'red', 'title' : 'Needle', 'hover' : 'Needle: 100' })); 2013/11/07 © 2013 IBM Corporation 43
  • 44. 例例3:コントロールにないウィジェットの利利⽤用(3)   •  描画コントロール(dojox.drawing) –  例例:お絵かきツール(dojox.drawing.Drawing) •  Dojo Toolkit の dojox.drawing モジュールの tests フォルダにある スパイダー・チャートのサンプルの1つを XPage に取り込んでみる –  http://bit.ly/1cessT9 お絵かきツールで描画 した内容を⽂文書に保存 (描画内容は JSON 形式 でフィールドに保存)   ※ drawing のサンプルは、可能性を⽰示すための 実験的なサンプルです。 ⼀一部動かない部分などあるかもしれません。   2013/11/07 © 2013 IBM Corporation 44
  • 45. サンプル NSF •  ご紹介した活⽤用例例を実装したサンプル NSF は以下の URL からダウンロードできます。(mydeveloperWorks) –  http://ibm.co/HPw0lS •  ダウンロードした ZIP の中の XPagesDay2013-B4-DojoSample.nsf に ブラウザからアクセスするとサンプルを実際に試すことができます。 –  動作環境 •  Lotus Notes/Domino 8.5.3 + XPages Extension Library or Upgrade Pack •  IBM Notes/Domino 9.0 2013/11/07 © 2013 IBM Corporation 45
  • 46. まとめ   •  jQuery と⽐比較しながら Dojo を学ぶことで、Dojo の理理解を より深めることができます –  特に API などは⾮非常によく似ているので参考になる場合が多いです •  XPages で Dojo はいろいろなところで使われているので、 ちょっとした API を利利⽤用するだけで XPages をよりリッチに することができます –  dojo コア API、UI コントロールの API など •  XPages は開発プラットフォームであり、基本的にはいろい ろな JavaScript ライブラリを使うことが出来ます。今⽇日紹介 した jQuery や Dojo に限らず、いろいろな JavaScript ライ ブラリを使ってみてください! –  例例:Ext, Sencha touch など 2013/11/07 © 2013 IBM Corporation 46