「Sencha Ext JS 4実践開発ガイド」の読書メモです。
2014年9月現在、既にExtJS5がリリースされている状況ですが、ExtJS4以降の基本を網羅的に概説してくれている日本語書籍としては貴重な一冊です。
難点は、この書籍で解説されているExtJS4が(恐らく)もう入手できなくなっていることでしょうか。Sencha本家サイトから評価版、あるいはGPLv3用にDLできるのはExtJS5のみで、ExtJS4をDLするリンクは見当たりません。
この読書メモでは、そのような現在の状況で、この本でどう手を動かして学ぶか、また、自分が気になったポイントについてメモとして残します。
Sencha Fiddleを使うと、過去のExtJSのバージョンを簡単に動かして練習ができます。
「開発ガイド」の方では.jsや.cssを手動で読み込む形式を紹介していますが、現在はSencha Cmdというビルドシステムが導入され、これでSPAのひな形を自動生成する流れが主流になっています。
Sencha Cmdで生成されたひな形をベースに、テスト用ならそれようのJSが、プロダクション環境用ならminifyされたJSがロードされるようにHTMLがビルドされます。
そのため、新規にアプリを作成する流れで勉強するなら、以下の順序が今ならオススメかと思います。
ただし、既存のサイトに部分的に、ライブラリとしてExtJSを導入するのであれば、Sencha Cmdの重厚なビルドシステムを導入するのが難しい場合もあります。そうした場合に、ExtJSのライブラリやCSSを手動で既存のHTMLに組み込むことになると思います。そのようなときに、書籍で紹介されている方法が参考になると思います。
ドキュメント
ExtJSは独自のクラスシステムを導入しています。その中で、個人的に特に押さえておいた方が良いのは、configとmixinとoverridesです。
なぜこれらが大事かというと・・・
config と mixin を理解しておけば、ExtJSのソースコードを読むのも楽になります。
ちょっと古いですが、Senchaの英語ドキュメントでこんなのもあります。
自分が、基本的なクラスシステムの使い方、config, mixin, overridesの使い方を練習したSencha Fiddle:
ExtJSはGUIコンポーネントが強力で、それらを使うとなればイベント駆動のプログラミングが必要です。ExtJSの場合、Ext.util.Observableというクラスをmixinすることで(このようにフレームワークの根本部分でmixinが使われてますので、mixinは重要)、DOM要素以外のクラスでもイベントハンドラを設定できます。このおかげで、イベントを発火させたい対象がDOM要素であるか否かを意識せずに、イベント駆動のプログラミングを実践できます。
ということで、DOM要素(=GUIコンポーネント)以外でもExt.util.Observableをmixinすればイベントハンドラを持てるようになるデモ:
書籍ではrelayEvents()も紹介されていますが、こちらもSencha Fiddleで練習してみました:
なお、Ext.util.Observableのメソッド一覧を見てみますと、"(add|remove)ManagedListener()"と対応する"mon|mun()"メソッドがあります。これと、普通の"(add|remove)Listener()"(on|un())との違いが分からなかったのですが、英語ですが良い記事がありました:
→この記事に出てくるサンプルコードをSencha Fiddleで練習してみました:
こちらの書籍では詳しく書かれていませんが、実際に開発する際は、ExtJSでボタンなどGUIコンポーネントを組み立てる時、どのようなライフサイクルで管理されているか知っておいたほうが良いと思います。
ExtJS5、しかも英語になりますが、ExtJS4から大きくは変わってない模様:
なぜライフサイクルを知っておいたほうが良いかというと、複雑なGUIを構築・管理する際に、必ず「いつレンダリングされるのか」「レンダリングされるタイミングで○○したい」「破棄されるタイミングはいつか」などを気にする必要が出てきます。この時、ライフサイクルがどうなっているか注意できるようになっておくと、解決方法も探しやすいです(実感)。
他に、書籍でちょっと気になったのが、「7.7. 状態管理」というところでExt.state.Providerの紹介です。CookieやlocalStorageで管理できるみたいで、面白そうです。
まだ練習できていないのですが、history APIも出てきていますので、このような状態管理をどう制御するのか、実際のアプリでも色々検討が必要なポイントかな、と思います。
特にSPAですと、この辺りはユーザの使い勝手に直結してきますので、より詳細な調査・検討が必要になる箇所かと思います。