ベータ・プログラムのユーザのためのアップグレード手順
この付録では、Zen Mojo ベータ・プログラムの使用中に作成したコードに影響を与える変更について説明します。
クラス名の変更
Zen Mojo クラスの名前が変更されました。これらのクラスは、現在、%ZEN.Mobile パッケージではなく、%ZEN.Mojo パッケージに含まれています。
アップグレード手順
-
Zen Mojo ページ・クラスごとにクラスを編集し、%ZEN.Mobile.basePage ではなく、%ZEN.Mojo.basePageOpens in a new tab を拡張します。例:変更前
Class Demo.MyPage Extends %ZEN.Mobile.basePage
変更後:
Class Demo.MyPage Extends %ZEN.Mojo.basePage
-
Zen Mojo アプリケーション・クラスごとに、%ZEN.Mobile.baseApplication ではなく、%ZEN.Mojo.baseApplicationOpens in a new tab を拡張するようにクラスを編集します。
-
Zen Mojo テンプレート・クラスごとに、%ZEN.Mobile.Component.contentTemplate ではなく、%ZEN.Mojo.Component.contentTemplateOpens in a new tab を拡張するようにクラスを編集します。
ネームスペースの変更
documentView コンポーネントとすべてのプラグインは、現在、XML ネームスペース "http://www.intersystems.com/zen/mojo" に格納されています ("http://www.intersystems.com/zen/mobile" ではありません)。つまり、ページ・クラスの pageContents で使用する XML ネームスペースを更新する必要があります。
また、現在、規約では、Zen Mojo ネームスペースには、ネームスペースの接頭語 zmf ではなく mojo を使用することになっています。
アップグレード手順
-
<pane> 要素の変更前:
xmlns:zmf="http://www.intersystems.com/zen/mobile"
変更後:
xmlns:mojo="http://www.intersystems.com/zen/mojo"
-
pageContents XData ブロックの残りについても、zmf 接頭語を mojo に変更します。
例
Zen Mojo ベータ・コードで動作したクラスから抽出した、以下のフラグメントを考えてみます。
XData pageContents [ XMLNamespace = "http://www.intersystems.com/zen" ]
{<pane xmlns="http://www.intersystems.com/zen"
xmlns:zmf="http://www.intersystems.com/zen/mobile" layout="none">
<zmf:documentView id="mainView"
...
リリース版の Zen Mojo で動作するためには、このフラグメントを以下のように変更する必要があります。
XData pageContents [ XMLNamespace = "http://www.intersystems.com/zen" ]
{<pane xmlns="http://www.intersystems.com/zen"
xmlns:mojo="http://www.intersystems.com/zen/mojo" layout="none">
<mojo:documentView id="mainView"
...
プラグインのリファクタリング
プラグインの名前もすべて変更されたため、現在では、次の 2 種類のプラグインが存在します。それはページ・マネージャ・プラグインとヘルパー・プラグインです。
documentView ごとに、ページ・マネージャ・プラグインが確実に 1 つ含まれている必要があります。ヘルパー・プラグインは複数組み込むことができます。ページ・マネージャ・プラグインは、ページを制御するロジックを定義します。ヘルパー・プラグインには、レイアウト・オブジェクトを定義するロジックが含まれています。
pageContents XData ブロックでは、documentView 要素にページ・マネージャ・プラグインが子要素として含まれている必要があります。ページ・マネージャ・プラグインには、以下のように、ヘルパー・プラグインがその子要素として含まれている必要があります。
<mojo:documentView id="mainView" additional attributes here...>
<mojo:somePageManagerPlugin>
<mojo:someHelperPlugin/>
<mojo:anotherHelperPlugin/>
</mojo:somePageManagerPlugin>
</mojo:documentView>
この例では、わかりやすくするためにインデントが使用されていますが、インデントを使用する必要はありません。
プラグインの詳細は、"Zen Mojo プラグインの使用法" を参照してください。
コア・プラグインは削除されました。新しい既定のヘルパー・プラグインが組み込まれています。このプラグインには、以前コア・プラグインに含まれていた $loop と $content 要素が用意されています。ただし、このヘルパー・プラグインには、旧コア・プラグインのその他のレイアウト・オブジェクトは用意されていません。実際にこれらのレイアウト・オブジェクトを使用しているお客様はいないと予想されます。
アップグレード手順と例
以下のリストに、具体的な変更例を示します。
Chocolate-Chip UI プラグインを使用していた場合は、documentView は以下のように表示されました。
<zmf:documentView id="mainView" additional attributes here...>
<zmf:chuiPlugin/>
<zmf:googleMapsPlugin/>
</zmf:documentView>
これを以下のバージョンに置き換えます。
<mojo:documentView id="mainView" additional attributes here...>
<mojo:chuiPageManager>
<mojo:chuiHelper/>
<mojo:googleMapsHelper/>
</mojo:chuiPageManager>
</mojo:documentView>
元のバージョンに <mojo:googleMapsPlugin/> が含まれていなかった場合は、新規バージョンでは <mojo:googleMapsHelper/> を省略します。
Dojo プラグインを使用していた場合は、documentView の表示は以下のようになりました。
<zmf:documentView id="mainView" additional attributes here...>
<zmf:dojoPlugin/>
<zmf:googleMapsPlugin/>
</zmf:documentView>
これを以下のバージョンに置き換えます。
<mojo:documentView id="mainView" additional attributes here...>
<mojo:dojoPageManager>
<mojo:dojoDijitHelper/>
<mojo:dojo2DChartHelper/>
<mojo:dojoGridXHelper/>
<mojo:googleMapsHelper/>
</mojo:dojoPageManager>
</mojo:documentView>
元のバージョンに <mojo:googleMapsPlugin/> が含まれていなかった場合は、新規バージョンでは <mojo:googleMapsHelper/> を省略します。また、Dojo ヘルパー・プラグインは複数ありますが、そのすべてが必要なわけではないことに注意してください。
JQuery Mobile プラグインを使用していた場合は、documentView の表示は以下のようになりました。
<zmf:documentView id="mainView" additional attributes here...>
<zmf:jqmPlugin/>
<zmf:googleMapsPlugin/>
</zmf:documentView>
これを以下のバージョンに置き換えます。
<mojo:documentView id="mainView" additional attributes here...>
<mojo:jQMPageManager>
<mojo:jQMHelper/>
<mojo:googleMapsHelper/>
</mojo:jQMPageManager>
</mojo:documentView>
元のバージョンに <mojo:googleMapsPlugin/> が含まれていなかった場合は、新規バージョンでは <mojo:googleMapsHelper/> を省略します。
コア・プラグインを使用していた場合は、documentView は以下のように表示されました。
<zmf:documentView id="mainView" additional attributes here...>
<zmf:corePlugin/>
<zmf:googleMapsPlugin/>
</zmf:documentView>
これを以下のバージョンに置き換えます。
<mojo:documentView id="mainView" additional attributes here...>
<mojo:mojoDefaultPageManager>
<mojo:mojoDefaultHelper/>
<mojo:googleMapsHelper/>
</mojo:mojoDefaultPageManager>
</mojo:documentView>
元のバージョンに <mojo:googleMapsPlugin/> が含まれていなかった場合は、新規バージョンでは <mojo:googleMapsHelper/> を省略します。
Mojo の既定のヘルパーでは、コア・プラグインに含まれていたすべてのオブジェクトを定義するわけではありません。定義するのは $loop、$if、および $content だけです。その他のレイアウト・オブジェクトを使用していた場合は、<mojo:HTML5Helper/> などの他のヘルパー・プラグインを追加し、そのプラグインでサポートされているレイアウト・オブジェクトを使用するようにレイアウト・グラフを更新します。
イベント処理の変更
documentView コンポーネントでは、onselect、onchange、および onevent コールバック属性をサポートしなくなりました。代わりに、このコンポーネントでは、関連するテンプレートの onselect()、onchange()、および onevent() メソッドがある場合には、これらを自動的に呼び出します。これらのメソッドには、以下のシグニチャがあります。
ClientMethod onselect(key, value, docViewId) [ Language = javascript ]
ClientMethod onchange(key, value, final, docViewId) [ Language = javascript ]
ClientMethod onevent(eventType, key, value, docViewId) [ Language = javascript ]
以下はその説明です。
-
key — 関連するレイアウト・オブジェクトのキー
-
value — 関連するレイアウト・オブジェクトの値 (存在する場合)
-
docViewId — 選択アクション、変更アクション、またはその他のイベントが発生した documentView の ID
-
final — 渡された値が最終値であるかどうかを指示
-
evtType — イベントのタイプ
これらのメソッドは既定では何も実行しません。Zen Mojo では、ユーザがページの動作をカスタマイズできるようにするために、これらのメソッドを提供しています。詳細は、このドキュメントで前述した “イベント・ハンドラ” を参照してください。
アップグレード手順
このアップグレードを処理するには、以下の方法を使用します。
-
documentView コンポーネントに現在定義されている onselect、onchange、および onevent コールバック属性を調べます。以下に例を示します。
onselect="zenPage.myMainViewSelect(key,value);"
この属性を documentView から削除します。
documentView の id もメモしておきます。
-
このコールバックによって参照されるメソッドを調べます。推奨する方法に従うと、このメソッドは、通常、関連するテンプレートを検索し、それに含まれるメソッドを呼び出します。以下に例を示します。
ClientMethod myMainViewSelect(key, value, final) [ Language = javascript ] { // check whether template has a handler for selection; if so, use it var template = this.getTemplate(); if (template && template.myMainViewSelect) { return template.myMainViewSelect(key,value,final); } }
このメソッドは不要になりました。削除してください。
-
テンプレート・クラスで、onselect() メソッドをオーバーライドします ([クラス]→[リファクタ]→[オーバーライド])。簡単にするために、このメソッドを簡易なディスパッチャとして作成できます。docView 引数の値を確認し、この値を使用して、既存のテンプレート・メソッドのうち、どのメソッドを呼び出すのかを決定します。以下に例を示します。
ClientMethod onselect(key, value, docViewId) [ Language = javascript ] { if (docViewId='mainView') { myMainViewSelect(key, value); } }
ページに onselect を定義するその他の documentView 要素がある場合は、手順 1 と 2 を繰り返し、新しい onselect() メソッドに分岐を追加します。
削除した onchange および onevent コールバック属性についても同様の手順を使用します。