Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

Zen Mojo の概要

この章では、Zen Mojo の概要とその中心となる概念について説明します。以下のトピックについて説明します。

Zen に習熟していれば、これらの概念のいくつかが類似していることがわかります。ただし、Zen にまったく習熟していなくても、Zen Mojo アプリケーションを作成できます。

Important:

Zen Mojo ベータ・プログラムに参加していた場合は、付録 “ベータ・プログラムのユーザのためのアップグレード手順” を参照してください。

Zen Mojo の概要

Zen Mojo は、モバイル・デバイスにもデスクトップにも適合する Web ページの作成を可能にするクラスのセットです。Zen Mojo には、主に以下のような特長があります。

  • ページのロード頻度が最小限になるようにアーキテクチャが設計されているので、負荷が高いロード操作を回避できます。単一のページを再ロードせずに大幅に変更できます。

  • クライアントとサーバの間の通信はすべて JSON としてパッケージされます。このフォーマットはきわめて軽量で、消費する帯域幅は少量です。

  • Zen Mojo ページは、すべての最新モバイル・デバイス上のブラウザでサポートされる HTML 5.0 を自動的に生成します。

    必要な場合はカスタム HTML を組み込むことができますが、一般には HTML を記述する必要はありません。

  • プラグイン・テクノロジにより、Zen Mojo では一般的なサードパーティ製の JavaScript ライブラリに簡単にアクセスできます。レイアウト・オブジェクトをレンダリングする複雑な JavaScript コードを記述する必要はなく、目的のレイアウトを単純に記述する、はるかにシンプルな JavaScript オブジェクトを作成できます。

    また、他のサードパーティ製のライブラリを使用するために、ユーザ独自のプラグインを作成することで、Zen Mojo を拡張することもできます。

  • Zen Mojo には、ユーザ・アクションに対応してページを変更するために使用できる豊富なツールのセットが用意されています。

Zen Mojo アプリケーションでは、クラスによってクライアント・メソッドとサーバ・メソッドの両方を定義します。一般に使用されることが多いのはクライアント・メソッドです。クライアント・メソッドは JavaScript で記述され、ブラウザ内で実行されます。サーバ・メソッドは Caché サーバ側言語のいずれかで記述されます (通常は Caché ObjectScript)。

役に立つ背景知識

Zen Mojo を使用して Web ページを作成するには、JavaScript、CSS、およびいくらかの Caché ObjectScript の知識が必要です。

Zen Mojo プラグインによって使用される JavaScript ライブラリの少なくとも 1 つに、ある程度は習熟していることが前提となります。

ハイブリッド・アプリケーションを作成する場合 (次のセクションを参照) は、PhoneGap に関する十分な知識が必要です。このサードパーティ製ツールについては、このドキュメントでは説明していません。

また、きわめて簡単な短い XML ドキュメントを読むことができたり、XML 用語の要素属性、およびネームスペースを知っていたりすると役立ちます。一方、XML の経験がなければ、このドキュメントと Zen Mojo サンプルに記載されている XML ドキュメントのフォーマットを注意深く模倣してください。XML について詳しく理解している必要はなく、このドキュメントでは必要に応じてヒントを示します。

Zen に習熟していると役に立ちますが、これも必要ではありません。

Zen Mojo アプリケーションの種類

Zen Mojo はクライアント・サーバの対話に対応しており、モバイル・デバイスまたはデスクトップで動作する Web クライアントに向けたアプリケーションの作成に使用できます。サーバは Caché サーバです。Zen Mojo を使用して作成できるアプリケーションにはいくつかの種類があります。

  • デスクトップ向けに設計された Web アプリケーション。

    このタイプのアプリケーションは、Zen および CSP で Web アプリケーションをすでに作成したことがある Caché ユーザに最もなじみ深いものです。ただし、Zen および CSP とは異なり、Zen Mojo の Web アプリケーションは単一のページで構成されます。

  • モバイル・デバイス向けに設計された Web アプリケーション。前の項目と同様に、このアプリケーションは単一のページで構成されます。この場合、ページはモバイル環境専用に作成するか、レスポンシブ・デザインを使用して各種のモバイル・デバイスに自動的に適応するように作成します。一般に、Web アプリケーションはモバイル・デバイスのネイティブ機能の限定された部分にしかアクセスできません。また、各種のモバイル・デバイス上でスムーズに実行するためには多少の微調整が必要です。

    この種のアプリケーションを作成するには、一般にデスクトップ Web アプリケーション用とは異なるプラグインを使用します。プラグインの中には、モバイル環境に適したものと、デスクトップに適したものがあります。

  • モバイル・デバイス向けのハイブリッド・アプリケーション。ハイブリッド・アプリケーションは、組み込みの (したがって不可視の) ブラウザで Web アプリケーションを実行するネイティブ・アプリケーションで構成されます。ネイティブ・コンテナが、デバイスの機能へのアクセスを提供します。アプリケーションはプッシュ通知を使用することもできます。

以下のサブセクションでは、Zen Mojo の Web アプリケーションの各部分について説明し、モバイル・アプリケーションとハイブリッド・アプリケーションに関するその他の考慮事項を示します。

Web アプリケーション

形式的には、Zen Mojo の Web アプリケーションは以下の部分から構成されます。

ページ・クラス

Zen Mojo ページ・クラスは、%ZEN.Mojo.basePageOpens in a new tab から派生したクラスです。Zen Mojo は、ユーザのアプリケーションが単一の非常にシンプルなページ・クラスを使用できるように設計されています。

テンプレート・クラス

Zen Mojo テンプレート・クラスは、%ZEN.Mojo.Component.contentTemplateOpens in a new tab から派生したクラスです。テンプレート・クラスは、データとレイアウトの情報を含む、アプリケーションのすべてのロジックを提供します。

複数のテンプレート・クラスを使用してアプリケーションを拡張できます。

Zen に習熟している場合は、Zen Mojo テンプレートが Zen テンプレートとは関係がないことに注意してください。

アプリケーション・クラス

スタイル・シートなど、アプリケーション全体にわたる動作を指定する、%ZEN.Mojo.baseApplicationOpens in a new tab から派生したオプションのクラスです。スタイル・シートは、クラス内で XData ブロックとして指定され、このブロックには CSS スタイル指示が含まれています。ページ・クラス内にスタイル・シートを配置することもできますが、スタイル情報はアプリケーション・クラス内で維持すると便利な場合があります。

サポート・クラス

Zen Mojo は、プラグイン・クラスを含む一連のサポート・クラスを提供しています。実装内で、サポート・クラスの使用法を間接的に指定します。一般に、これらのクラスをサブクラスにすることはありません。

JavaScript インクルード・ファイル

プラグイン・クラスの多くに、外部のサードパーティ製 JavaScript インクルード・ファイルが必要です。

CSS スタイル・シート

プラグイン・クラスは通常、1 つ以上の CSS スタイル・シートを使用します。これらは、プラグインが提供するレイアウト・オブジェクトの外観を定義するのに役立ちます。プラグインに付属するサードパーティ製のスタイル・シートを使用することも、ユーザ独自のスタイル・シートを作成することもできます。

Web アプリケーション定義

Web アプリケーション定義は、CACHESYS データベース内にある構成です。アプリケーション定義は、管理ポータルで作成します。このポータルは、ユーザとロールを定義する場所と同じです。

この構成は、例えばアプリケーションにアクセスする方法、既定のタイムアウト期間、既定のエラー・ページなどの詳細情報を指定します。

ネームスペースを作成する際に、管理ポータルには関連した Web アプリケーションを同時に作成するオプションが用意されています。この既定のアプリケーションを使用することも、別のアプリケーションを定義することもできます。どちらの場合も、アプリケーション定義を検討して、必要な条件に合っているか確認する必要があります。

具体的なガイダンスについては、"Zen アプリケーションの開発" の “Zen アプリケーションの構成” を参照してください。Zen Mojo は Zen をベースにしているので、このセクションの内容が当てはまります。Web アプリケーションの一般的な情報については、"Caché セキュリティ管理ガイド" の “Web アプリケーション” を参照してください。

クラス (およびその基礎となる Zen Mojo クラス) は、クライアント・メソッドとサーバ・メソッドの両方を定義します。クライアント・メソッドは JavaScript で記述され、ブラウザ内で実行されます。サーバ・メソッドは Caché サーバ側言語のいずれかで記述されます (通常は Caché ObjectScript)。前述のとおり、標準的な Zen Mojo アプリケーションのメソッドのほとんどはクライアント・メソッドです。

モバイル・アプリケーション

Zen Mojo を使用してモバイル環境向けのアプリケーションを作成する場合は、Zen Mojo ページを作成してから、ページの静的 HTML バージョンを生成します (これはページのオフライン・バージョンです)。続いて、必要な JavaScript ライブラリと CSS ファイルを収集し、これらの項目をユニットとしてまとめてパッケージします。さらに、他のモバイル・アプリケーションと同じチャネルを使用してこのユニットを Web アプリケーションとして配信します。

項目をユニットとしてパッケージするには、PhoneGap などのサードパーティ製ツールを使用します。これについては、このドキュメントでは説明していません。

このアプリケーションは、必要なときにサーバと通信し、またサーバが使用不可のときは最小限の機能も提供します。詳細はアプリケーションによって異なります。重要な点として、次に示すことを考慮してください。

  • モバイル・デバイス用に設計されたライブラリを使用するプラグインを選択します。例えば、JQuery Mobile と Chocolate-Chip UI のライブラリはモバイル・デバイス上での使用に向いていますが、Dojo ライブラリはより大きな画面での使用に向いています。

  • Web ページは小さな画面で表示および使用できるように十分に小さくシンプルにし、画面の回転に対応できることが必要です。

  • ページは、サーバへのアクセスを必要とせずに最小限の機能を提供できるようにする必要があります。

    例えば、ユーザがアプリケーションに最初にアクセスするときにサーバにアクセスできない場合、ページでは前にキャッシュに入れていたデータを使用できます。

ハイブリッド・アプリケーション

ハイブリッド・アプリケーションでは、ユーザはデバイス固有のネイティブ・コンテナも作成する必要があります。ネイティブ・コンテナを作成するには、SWIFT または Objective-C (iOS デバイスの場合)、Java (Android を実行するデバイスの場合)、または.NET ファミリの言語 (Windows Phone の場合) を使用します。Caché は、ネイティブ・インタフェースをデータとアプリケーション・ロジックに接続するために必要なオプションをすべて備えています。Caché は JSON と REST のサポートを提供しているので、REST サービス上で JSON を使用できます。Caché は、Web サービスもサポートします (現在もこの目的で頻繁に使用されています)。必要な場合は、カスタム HTTP リクエストを作成することも可能です。どのアプローチを使用する場合も、Caché はセッション・コンテキストを提供します。また、SSL3 を使用したセキュア接続への切り替えは簡単です。

ハイブリッド・アプリケーションでは、Web ページのクライアント・メソッドはモバイル・デバイスのハードウェア機能にアクセスできます。

アプリケーションはプッシュ通知を使用することもできます。プッシュ通知の詳細は、"Ensemble プッシュ通知の構成と使用法" を参照してください。

オフライン・ページおよびその他のコンポーネントとともにネイティブ・コンテナをパッケージするには、PhoneGap を使用します (このドキュメントでは説明していません)。

Zen Mojo ページの基本的な定義

Zen Mojo ページを定義するには、以下の単純な例のように XData ブロックを含むページ・クラスを定義します。

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"
ongetlayout = "return zenPage.getContent('layout',key,criteria);"
ongetdata = "return zenPage.getContent('data',key,criteria);">
<mojo:mojoDefaultPageManager>
   <mojo:HTML5Helper/>
</mojo:mojoDefaultPageManager>
</mojo:documentView>

</pane>
}

ページ・クラスの詳細は以降の章で説明します。この章では、この XData ブロックのみを検討します。

中括弧で囲まれたテキストは、Zen Mojo がページの生成に使用する XML ドキュメントです。この例の定義は、1 つの <mojo:documentView> 要素 (または、より簡単に documentView) からなります。この要素は、Zen Mojo が提供する汎用コンテナです。この単純な例は標準的なページを示しており、以下の注ではこの例を使用して概要を説明します。

  • ongetdata コールバックは、この documentView で使用するデータを取得する方法を指定します。この documentView がデータを取得すると、Zen Mojo は ongetdata によって指定されたメソッドを呼び出して、そのメソッドにいくつかの引数を渡します(後で説明するように、このコールバックは JSON オブジェクトを返します)。

  • ongetlayout コールバックは、この documentView のレイアウトを作成する方法を指定します。この documentView がビジュアル表示を作成すると、Zen Mojo は ongetlayout によって指定されたメソッドを呼び出して、再びそのメソッドにいくつかの引数を渡します。

    ongetlayout コールバックは、JSON オブジェクトを返します。このオブジェクトは Zen Mojo レイアウト・グラフです。レイアウト・グラフは、レイアウト・オブジェクトの組み合わせです。レイアウト・オブジェクトは一般に、段落、テーブル、グラフ、グループ、メニュー、チェック・ボックス、ボタン、その他の Web ページ要素などの項目を含みます。

    必要に応じて、レイアウト・オブジェクトは ongetdata コールバックから返されるデータを参照します。例えば、ドロップダウン・リストは ongetdata コールバックから返される値のリストを表示できます。

  • この documentView は 1 つの子要素 <mojo:mojoDefaultPageManager> を含んでいます。これは、Zen Mojo が提供するページ・マネージャ・プラグイン、またはページ・マネージャです。それぞれの documentView は、ただ 1 つのページ・マネージャを含んでいる必要があり、これがページのレンダリングを自動的に管理します。

    Zen Mojo は複数のページ・マネージャを提供しており、その一部は特定のヘルパー・プラグインと組み合わせた場合のみ使用できます。次の黒丸の項目を参照してください。

  • ページ・マネージャは、1 つの子要素 <mojo:HTML5Helper/> を含んでいます。この子要素は、Zen Mojo が提供するヘルパー・プラグインで、レイアウト・オブジェクトのセットを定義します。ongetlayout コールバックは、このヘルパー・プラグインが定義するレイアウト・オブジェクトからなるレイアウト・グラフを返します。

    ページ・マネージャは、複数のヘルパー・プラグインを含むこともでき、この例のように 1 つだけに限りません。多くの場合、複数のヘルパー・プラグインを使用すると役に立ちます。

    Tip:

    <mojo:HTML5Helper/> 要素は空です。この例では、対応する開始タグと終了タグの代わりに、単一の空タグのみでこの要素が示されていることに注意してください。上記の例に示したように、開始タグの形式は <element>、終了タグの形式は </element> です。空タグの形式は <element/> です。

次のセクションでは、ヘルパー・プラグインとレイアウト・オブジェクトについてさらに詳しく説明します。

Zen Mojo ヘルパー・プラグインとレイアウト・グラフ

Zen Mojo は、ヘルパー・プラグインとレイアウト・グラフを使用して Web ページの外観を決定します。ヘルパー・プラグインは、レイアウト・オブジェクトのセットを定義するクラスで、それぞれがグラフィカル要素を表現します。プラグイン・クラスは、これらの要素をレンダリングする方法を指定するメソッドを定義します (通常はサードパーティ製の JavaScript ライブラリを使用)。

documentView に複数のヘルパー・プラグインを組み込むことができます。現在、Zen Mojo は ChocolateChip-UI フレームワーク、Dojo ライブラリ、Google Maps API、jQueryMobile ライブラリ、および HTML5 標準へのアクセスを提供するヘルパー・プラグインを提供しています。また、既定のヘルパーは、レイアウト・グラフ内で使用する特殊なユーティリティ・オブジェクトを提供します。ユーザ独自のヘルパー・プラグインを作成することもできます。

レイアウト・グラフは、レイアウト・オブジェクトに関連したレイアウトを記述する JavaScript オブジェクトです。複雑な JavaScript や HTML のレンダリング・コードを作成する必要はありません。Zen Mojo がレイアウト・グラフに基づいてこのコードを自動的に生成します。以下に、レイアウト・グラフの例を示します。

content = {
      children:[
         {type:'$header',caption:'=[sectionHeader]'},
         {type:'$listview',value:'=[personList]',filter:true,children:[
             {type:'$listviewitem',key:'drill-person',value:'=[id]',
                   label:'=[name]',content:'=[ssn]',clickable:true}
                ]}
         ]
};

この例では、$header$listview、および $listviewitem がレイアウト・オブジェクトのタイプで、これらはプラグインによって提供されます (具体的には、jQuery Mobile ヘルパー)。このレイアウト・グラフ内のその他の情報は、これらのレイアウト・オブジェクトに表示するデータを指定し、これらの要素の動作を記述します。

Zen Mojo テンプレート

Zen Mojo テンプレートの目的は、Zen Mojo ページの外観と動作を定義することです。このため、Zen Mojo ページがテンプレートをどのように使用するか理解しておくことが重要です。このセクションでは、以下の項目について説明します。

説明を簡単にするために、キャッシュについてはこの章で後述します。

コンテンツ・オブジェクト

すべての documentView について、いつでも Zen Mojo は 2 つの JSON オブジェクトを使用して、その documentView のコンテンツを決定します。総称して、これらの JSON オブジェクトはコンテンツ・オブジェクトと呼ばれます。以下の図に一例を示します (単一の documentView からなるページの例)。

generated description: json objects

これら 2 つのコンテンツ・オブジェクトは、データ・オブジェクトおよびレイアウト・グラフと呼ばれます。

現在のデータ・オブジェクトは、documentView で現在使用できるデータを格納しています。このデータはサーバから取得する場合がよくありますが、常にそうであるとは限りません。

現在のレイアウト・グラフは、documentView の現在の外観を決定します。基本形式では、このオブジェクトは以下の組み合わせで構成されます。

  • 関連したプラグイン内で定義される Zen Mojo レイアウト・オブジェクト

  • データ・オブジェクトによって提供される値の参照

  • 定数値とその他の JavaScript 式

ページは、テンプレート・クラスから両方のコンテンツ・オブジェクトを取得し、これらを使用して documentView を生成します。

次の章のチュートリアル 1 およびチュートリアル 2 で、これらのオブジェクトのデモを示します。

キー

Zen Mojo は、ユーザ対話をサポートするためにキーのシステムを使用します。このシステムは、以下のように実行されます。

  • レイアウト・グラフ内で、メニュー項目、ボタンなどの選択可能な項目にキーを関連付けます。

  • ページ・コールバック内で、現在のキーは JavaScript の key 変数として使用できます。例えば、ユーザがドロップダウン・リスト内の項目をクリックすると、Zen Mojo は onselect() コールバックを呼び出します。このコールバック内で、key 変数は選択されたリスト項目のキーを格納しています。

  • Zen Mojo は、データ・オブジェクトとレイアウト・グラフの現在のキーをそれぞれ設定するメソッドを提供しています。レイアウトを更新するためのメソッドも用意されています。

    よくあるシナリオでは、ユーザがオプションを選択すると、onselect() コールバックが呼び出されます。このコールバックは、データとレイアウトのキーを更新してから、レイアウトを更新してページの外観を変更します。

コールバック内では他の変数も使用できるので、キーに全面的に依存しなくてもロジックを作成できます。

コンテンツ・オブジェクトとキー

コンテンツ・オブジェクトはキー固有です。つまり、documentView がデータ・オブジェクトまたはレイアウト・グラフを取得する際には、特定のキーを使用します。

generated description: component object versions

使用するプラグインによっては、ページに複数の documentView コンポーネントを含めることができ、それぞれに前述の考慮事項が適用されます。

generated description: page and object versions

テンプレート・システム

Zen Mojo テンプレートはすべてのアプリケーション・ロジックに関わります。つまり、ページに必要なすべてのデータとレイアウト・グラフを返す処理を担当します。最終的に、Zen Mojo ページは、ユーザがテンプレート・クラスに実装する onGetContent()%OnGetJSONContent() の 2 つのメソッドを使用します。

同様に、Zen Mojo テンプレートはサーバへのデータの送信を担当します。この場合、Zen Mojo ページは、ユーザがテンプレート・クラスに実装する %OnSubmitData() メソッドを使用します。

このセクションでは、ページとテンプレートがどのように連係して動作するか説明し、これらのメソッドを使用する方法とタイミングについて説明します。

コンテンツ・オブジェクトの取得

ページは単一の中心となるメソッド (getContent()) を使用して、テンプレートからコンテンツ・オブジェクトを取得します。これは、Zen Mojo が提供する既存のメソッドです。返すオブジェクトを指定できるように、getContent() には以下の項目を指定するための引数があります。

  • 取得するコンテンツ・オブジェクト — providerName 引数

  • そのコンテンツ・オブジェクトを取得する際に使用するキー — key 引数

その他の引数もありますが、ここでの説明には重要ではありません。

getContent() メソッドは、テンプレート・クラス内の onGetContent() メソッドと %OnGetJSONContent() メソッドを呼び出し、これらのパラメータをメソッドに渡します。

以下の手順では、全体的なロジックの流れを概説します。説明を簡単にするために、これらの手順では Zen Mojo のキャッシュ・メカニズムには触れません。これについては、この章で後述します。

  1. サーバから新規データを取得するか、表示を変更するか、またはその両方を実行するようにページの応答が設計されている、何らかのアクションをユーザが実行します。このアクションとしては、ボタンを押すことなどがあります。

  2. そのアクションにより、ページ・クラスの getContent() メソッドが呼び出されます。

    これは、Zen Mojo が提供するクライアント・メソッドです。前述のとおり、クライアント・メソッドはすべて JavaScript で記述され、ブラウザ内で実行されます。

  3. getContent() メソッドは、別の Zen Mojo メソッド (直接の使用を目的としていない内部メソッド) を呼び出します。

  4. その内部メソッドは処理を実行した後、関連したテンプレート・クラス内の onGetContent() メソッドを呼び出します。

    onGetContent() はアプリケーション固有のクライアント・メソッドです。

  5. onGetContent() メソッドは、ディスパッチャとしての使用を目的としています。providerName 引数を検査した後、以下のいずれかを行います。

    • 要求されたオブジェクトを返す、別のクライアント・メソッドを呼び出します。

      返されるオブジェクトが指定されたキーに適合するように、onGetContent()key の値と他の引数をそのメソッドに渡します。

    • null を返します。この場合は、次のステップを参照してください。

  6. onGetContent() が null を返す場合、テンプレートはテンプレート・クラス内の %OnGetJSONContent() メソッドを呼び出します。

    %OnGetJSONContent() メソッドは、アプリケーション固有のサーバ・メソッドです。前述のとおり、サーバ・メソッドは Caché ObjectScript で記述され、サーバ上で実行されます。

  7. %OnGetJSONContent() メソッドはまず pProviderName 引数を検査して、オブジェクトが必要となる対象の documentView を判別します。

    その後、内部分岐が pKey 引数を検査して、オブジェクトのどのバージョンを返すか判別します。

    メソッドはオブジェクトを構築してページにオブジェクトを返し、ページはそのオブジェクトを使用します。

以下の図は、これらのステップをまとめたものです。

generated description: getcontent

一般に、onGetContent() はレイアウト・グラフを返し (これらはサーバとの通信を必要としないため)、%OnGetJSONContent() はデータ・オブジェクトを返します。

データの送信

ページがサーバにデータを送信する際に、テンプレートは必要なロジックを提供します。ロジックの全体的な流れは、以下のとおりです。

  1. ユーザは [保存] ボタンまたは [送信] ボタンをクリックするか、ページに備わっているその他のアクションを実行します。

    このボタンの実装により、submitData() ページ・メソッドが呼び出されます。

    submitData() ページ・メソッドは、以下の 3 つの引数を取ります。

    • key — サーバにデータを送信する際に使用するキー。

    • data — サーバに送信するデータを格納する JSON オブジェクト。

    • notify — null または関数のどちらか。この引数が関数の場合、ページはデータをサーバに非同期に送信します (同期的でなく)。その後、データが送信されると、ページはこの引数によって指定された関数を実行します。

  2. submitData() メソッドは、関連したテンプレート・クラスの %OnSubmitData() メソッドを呼び出します。

    %OnSubmitData() は、ユーザが実装したアプリケーション固有のメソッドです。

  3. %OnSubmitData() メソッドは、キーを受け取って、オブジェクトを入力として送信します。

    このメソッドは、最初にキーを検査して、使用するコードの分岐を判別します。次に、アプリケーションの要求に応じて、送信オブジェクトを検査し、使用します。最後に、応答オブジェクトを作成して出力として返します。その後、Zen Mojo は応答オブジェクト (別の JSON オブジェクト) をページ上で使用できるようにします。

generated description: submitdata

Zen Mojo コンテンツ・キャッシュ

サーバの不必要な呼び出しを避けるために (また、現在のテンプレートの不必要な追加呼び出しを避けるために)、Zen Mojo はローカル配列のキャッシュにコンテンツを格納し、可能な場合はそのキャッシュを使用します。

具体的には、ページ・メソッド getContent() は、使用可能ならばキャッシュを使用します。指定された key 引数と criteria 引数にキャッシュ・コンテンツがない場合、getContent() は現在のテンプレートの onGetContent() を呼び出します (この章で前述したとおり)。

generated description: cache details

特定の documentView に対して Zen Mojo が %OnGetJSONContent() を呼び出すように強制する必要がある場合は、その documentView に対してキャッシュを無効にすることができます。例えば、ページがサーバから新しいデータを取得するように強制する必要がある場合にこれを行います。

イベント処理

ページでイベントが発生すると、Zen Mojo は関連したテンプレート・クラス内のイベント・ハンドラを自動的に呼び出します。Zen Mojo のイベント・ハンドラは、onselect()onchange()、および onevent() の各メソッドで、既定ではこれらに動作はありません。

  • ユーザがレイアウト・オブジェクトを選択すると、Zen Mojo は onselect() メソッドを呼び出します。

  • ユーザがレイアウト・オブジェクトの値を変更すると、Zen Mojo は onchange() メソッドを呼び出します。

  • 別のタイプのイベントが発生すると、Zen Mojo は onevent() メソッドを呼び出します。

ページを対話式にする場合は、これらのメソッドのいずれかまたはすべてをテンプレート・クラス内で定義します。それぞれのメソッドに対して、Zen Mojo はイベントが発生したコンテキストに関する情報を自動的に渡します。この情報は、documentView、項目キー、および項目値を示しています(レイアウト・グラフでは、メニュー項目、ボタンなどの選択可能な項目にキーを関連付ける必要があります)。onevent() の場合、Zen Mojo はイベント・タイプも渡します。

例えば、キーとして key1 を持つメニュー項目をユーザが選択するとします。Zen Mojo は、onselect() コールバックを呼び出し、key 引数の値として key1 を渡します。このコールバックは、データとレイアウトのキーを key1 に設定してから、レイアウトを更新してページの外観を変化させます。

メソッド内では、以下のようなタスクに使用するツールにアクセスできます。

  • データ・オブジェクトとレイアウト・グラフの現在のキーを設定する。

  • レイアウトを更新する。

  • サーバにデータを送信する。

  • 新規レイアウトをドキュメント・スタックにプッシュする (またはスタックからポップする)。

Zen Mojo は、データ・オブジェクトとレイアウト・グラフの現在のキーをそれぞれ設定するメソッドを提供しています。レイアウトを更新するためのメソッドも用意されています。追加のメソッドにより、ページと対話したり、サーバにデータを送信したりすることができます。このドキュメントの後続の章では、これらのツールについて説明します。

コールバック内では他の変数も使用できるので、キーに全面的に依存しなくてもロジックを作成できます。

Zen Mojo の動作

Zen Mojo は Zen とほぼ同じように動作しますが、Zen Mojo ははるかに軽量です。

クライアントがページ要求を送信すると、Zen Mojo はページとそのコンポーネントすべてを生成して、オブジェクト・ツリーを作成します。オブジェクト・ツリーは、クライアントのブラウザでページを表示するために必要な CSS (スタイル・シート)、JavaScript (クライアント・ロジック)、および HTML (レイアウト指示) をすべて生成します。

クライアントのブラウザで、JavaScript オブジェクトのセットとして、同じオブジェクト・ツリーが自動的に再作成されます。これにより、このオブジェクト・ツリーのプロパティがクライアントで使用できます。もちろん、クライアントはクライアント・メソッドを使用することもできます。

このオブジェクト・ツリーは、Zen Mojo では Zen の場合より大幅に小さくなっています。特に、標準的な Zen ページには多数のコンポーネント・オブジェクトが含まれています。これに対して、標準的な Zen Mojo ページには 1 つの documentView オブジェクトが含まれます。

generated description: object trees

ユーザがページと対話を進めるに従って、クライアント・オブジェクト・ツリーのさまざまなメソッドを呼び出すイベントが起動します。Zen Mojo はサーバとの通信を自動的に管理し、セッション・コンテキスト (存在する場合) とセキュリティも処理し、クライアントとサーバの間で変更の同期も行います。

Zen Mojo では、セッションがなくてもアプリケーションの実行が可能です。つまり、サーバに接続せずにアプリケーションを実行できます。これに対して、Zen はこのシナリオをサポートしません。

Zen Mojo ページ・オブジェクト

Zen Mojo がページを表現するために使用するオブジェクト・ツリー (および対応する Caché クラス) についていくつかのことを知っておくと役に立ちます。このオブジェクト・ツリーには、以下のものが含まれています。

  • ページ・クラスのインスタンス。ページ・クラスは %ZEN.Mojo.basePageOpens in a new tab から継承されます。このクラスは、ページ・インスタンスの操作を可能にするメソッドとプロパティを提供します。

  • pageContents に追加したそれぞれの documentView のインスタンス。通常、pageContents は 1 つか 2 つの <mojo:documentView> コンポーネントを含みます。プラグインの一部では、単一の <mojo:documentView> のみがサポートされます。一般に、ページ・マネージャ・プラグインがモバイル・デバイスでの使用を目的にしている場合、そのプラグインはページ全体を使用し、複数の documentView をサポートしません。

    それぞれの <mojo:documentView> は、クラス %ZEN.Mojo.Component.documentViewOpens in a new tab のインスタンスです。このクラスは、インスタンスと関連オブジェクト (プラグインなど) の操作を可能にするメソッドを提供します。

  • それぞれの documentView インスタンスは、子オブジェクトを含みます。これらのオブジェクトは、その documentView によって指定されるプラグインのインスタンスです。

    それぞれのページ・マネージャ・プラグインは %ZEN.Mojo.Plugin.basePageManagerOpens in a new tab のサブクラスで、それぞれのヘルパー・プラグインは %ZEN.Mojo.Plugin.baseHelperPluginOpens in a new tab のサブクラスです。

  • コンテンツ・プロバイダ・コンポーネント。これは、すべての Zen Mojo ページに自動的に組み込まれます。ページはこのコンポーネントを使用して、関連したテンプレートにアクセスし、テンプレートを使用できます。コンテンツ・プロバイダは %ZEN.Mojo.Component.contentProviderOpens in a new tab のインスタンスです。

    以下のオブジェクトがコンテンツ・プロバイダに付加されます。

    • ページ・クラスに関連した各テンプレート・クラスのインスタンス。

    • 1 つ以上の JSON プロバイダ。JSON プロバイダは %ZEN.Auxiliary.jsonProviderOpens in a new tab のインスタンスです。コンテンツ・プロバイダには、テンプレートが返す各データ・オブジェクトの JSON プロバイダが存在します。レイアウト・グラフの JSON プロバイダは存在しません (これらは通常サーバを必要としないため)。

    コンテンツ・プロバイダは、この章で前述した内部処理の一部を担当します。

    キャッシュを無効にする場合を除いて、コンテンツ・プロバイダを直接操作する必要はありません。

Zen Mojo は、必要に応じてこのオブジェクト・ツリーの各部分にアクセスするためのメソッドを提供しています。つまり、このオブジェクト・ツリーの詳細な構造についての知識は必要ありません。

Zen Mojo のバージョン番号

Zen Mojo コア、各プラグイン、および各プラグイン・リファレンス・ドキュメントに対して、別々のバージョン番号が付けられています。これらのバージョン番号を確認するには、%ZEN.Mojo.UtilsOpens in a new tab%PrintVersion() メソッドを使用します。

do ##class(%ZEN.Mojo.Utils).%PrintVersion()

以下に例を示します。

do ##class(%ZEN.Mojo.Utils).%PrintVersion()
 
Zen Mojo version 1.0.10
 
Page Managers
 
"0.5.3" : %ZEN.Mojo.Plugin.chui352PageManager
"0.5.2" : %ZEN.Mojo.Plugin.chuiPageManager
"1.0.2" : %ZEN.Mojo.Plugin.dojo191PageManager
"1.0.1" : %ZEN.Mojo.Plugin.dojoPageManager
"1.0.4" : %ZEN.Mojo.Plugin.jQM132PageManager
"1.0.0" : %ZEN.Mojo.Plugin.jQM143PageManager
"1.0.3" : %ZEN.Mojo.Plugin.jQMPageManager
"1.0.2" : %ZEN.Mojo.Plugin.mojoDefaultPageManager
 
Helper Plugins
 
"1.0.11" : %ZEN.Mojo.Plugin.HTML5Helper
"1.0.1" : %ZEN.Mojo.Plugin.charts101Helper
"0.5.5" : %ZEN.Mojo.Plugin.chui352Helper
"0.5.3" : %ZEN.Mojo.Plugin.chuiHelper
"1.0.5" : %ZEN.Mojo.Plugin.dojo1912DChartHelper
"1.0.5" : %ZEN.Mojo.Plugin.dojo191DijitHelper
"1.0.3" : %ZEN.Mojo.Plugin.dojo2DChartHelper
"1.0.4" : %ZEN.Mojo.Plugin.dojoDijitHelper
"1.0.4" : %ZEN.Mojo.Plugin.dojoGridX130Helper
"1.0.3" : %ZEN.Mojo.Plugin.dojoGridXHelper
"1.0.6" : %ZEN.Mojo.Plugin.googleMaps3Helper
"1.0.5" : %ZEN.Mojo.Plugin.googleMapsHelper
"1.0.1" : %ZEN.Mojo.Plugin.highCharts401Helper
"1.0.17" : %ZEN.Mojo.Plugin.jQM132Helper
"1.0.2" : %ZEN.Mojo.Plugin.jQM143Helper
"1.0.15" : %ZEN.Mojo.Plugin.jQMHelper
"1.0.7" : %ZEN.Mojo.Plugin.mojoDefaultHelper
 
Plugin Documentation installed: 0.8.6

Zen Mojo プラグイン・リファレンス・ドキュメントのインストールとアクセスについては、"Zen Mojo プラグインの使用法" を参照してください。

FeedbackOpens in a new tab