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 Mojo クライアント・メソッド内で使用できる主な汎用の変数と関数をいくつか示します。

  • this — この標準 JavaScript 変数は、変数を使用する場所に応じて、テンプレートまたはページの現在のインスタンスを表します。

    つまり、テンプレート・メソッド内で this を使用すると、テンプレート・インスタンスが返されます。ページ・メソッド内で this を使用すると、ページ・インスタンスが返されます。

  • zenPage — このインターシステムズ変数は、現在のページオブジェクトを表します。

  • zen(id) — このインターシステムズ関数は、documentView、または指定された ID を持つ他のコンポーネントへの参照を返します。

    レイアウト・オブジェクトはコンポーネントではないため、この関数を使用してレイアウト・オブジェクトにアクセスすることはできないことに注意してください。レイアウト・オブジェクトにアクセスするには、documentView コンポーネントのメソッドを使用します。このドキュメントで後述する “レイアウト・オブジェクトとの対話操作” を参照してください。

  • zenGet(property_or_array_item, optional_default_value) — このインターシステムズ関数は、指定されたオブジェクト・プロパティまたは配列項目を検査して、シナリオに応じてその値、オプションの既定値、または空の文字列を返します。

    具体的には、プロパティまたは配列項目が定義されている場合、関数はその値を返します。項目が定義されておらず、2 番目の引数が指定されている場合、この関数は 2 番目の引数によって指定された値を返します。項目が定義されておらず、2 番目の引数が指定されていない場合、この関数は空の文字列 ('') を返します。

    例えば、以下のコードを考えてみます。

    if (myobj.prop4 == undefined) {
        var returnval = 'No information available';
    }
    

    このコードは、以下と同等です。

    var returnval=zenGet(myobj.prop4,'No information available');
    
  • console.log(argument) — この標準 JavaScript 関数は、Web コンソール・ログにエントリを生成します。

  • alert(argument) — この標準 JavaScript 関数は、指定したメッセージを表示するポップアップを生成します。この関数は、診断目的にのみ使用することをお勧めします。

  • zenPage.showMessage(argument) — このインターシステムズ関数は、指定したメッセージを表示するポップアップ・メッセージを生成します。この関数は、ユーザ向けのメッセージにのみ使用することをお勧めします。

インターシステムズ提供のその他の変数と関数については、"Zen アプリケーションの開発" の “クライアント側の関数、変数、およびオブジェクト” を参照してください。その他の標準 JavaScript オプションについては、該当する JavaScript ドキュメントを参照してください。

stash ファイルへの値の保存

場合によっては、複数のレイアウト内でデータを使用できるように、クライアント側データを一時的に保存する必要が生じることがあります。例えば、サーバにデータを送信する前に、複数のレイアウトを使用してユーザからデータを収集する必要があることが考えられます。または、あるレイアウトのデータを別のレイアウト内で表示したい場合もあります。あるいは、内部 ID を追跡する必要が生じることもあります。このような場合には、値を stash ファイルに保存してから、後で使用できます。値を stash ファイルに保存するには、状況に応じて、ページ・インスタンスまたはテンプレート・インスタンスのプロパティにその値を保存します。

  • ページ・インスタンスのプロパティに値を保存する場合は、zenPage 変数のプロパティを設定します。zenPage 変数は、ページ・クラスとテンプレート・クラスの両方のクライアント・メソッド内で使用できます。

    プロパティ名の先頭にアンダースコア文字 (_) を付けることにより、このプロパティがクライアント上でのみ定義されるようにします。内部で使用されるプロパティ名との競合を避けるために、プロパティ名の最初を _myApp や同様の短い文字列にすることを検討してください。

  • テンプレート・インスタンスのプロパティに値を保存する場合は、テンプレート・クラスのクライアント・メソッド内で this 変数のプロパティを設定します。

    this はページ・クラス内でも使用できることに注意してください。そのコンテキストでは、this はページ・インスタンスを指します。混乱を避けるために、stash ファイルに保存される値 (ページまたはテンプレート) に対して単一のコンテキストを選択し、そのコンテキストを一貫して使用することをお勧めします。

stash ファイルに保存された値が必要なくなったときは、delete を使用して削除します。以下に例を示します。

delete this._MyNewValues;

JSON オブジェクトの文字列への変換

Zen Mojo は、以下のように、クライアントとサーバの間の通信をすべて JSON オブジェクトとしてパッケージ化します。

  • サーバからデータを取得するには、テンプレート・メソッド %OnGetJSONContent() を (間接的に) 呼び出します。このメソッドは、出力として Zen プロキシ・オブジェクトを返します。Zen Mojo はこのオブジェクトを使用して同等の JSON オブジェクトを作成し、その JSON オブジェクトをクライアントに送信します。

  • サーバにデータを送信するには、ページの submitData() メソッドを呼び出します。入力として、データを含む JSON オブジェクトを使用する必要があります。

ただし、値を stash ファイルに保存する際には、stash ファイルに保存できるのが単一の JavaScript 値 (オブジェクトでない) のみであることに注意してください。JSON オブジェクト全体を stash ファイルに保存する必要がある場合は、まずユーティリティ・メソッド JSON.stringify() を使用します。このメソッドは、1 つの引数 (JSON オブジェクト) を取り、文字列を返します。その後、返された文字列を stash ファイルに保存します。

JSON.stringify() ユーティリティ・メソッドは、クライアント・メソッド内で使用できます。

名前付け規約の設定

名前付け規約を定めておくと、混乱を避けるのに役立ちます。このセクションでは、以下の項目について説明します。

Zen Mojo プログラムでは大文字と小文字が区別されます。つまり、aA は同じではありません。

クラス名

ZEN.Component というパッケージ内で、大文字と小文字の組み合わせを使用したどのようなクラスも作成しないことを強くお勧めします。ZEN.Component というパッケージを作成すると、Zen がクライアント側コードを生成する方法に影響を及ぼします。

また、Zen Mojo アプリケーションは複数のテンプレートを使用するように容易に拡張できるので、テンプレート・クラスをサブパッケージに配置する場合があることに注意してください。

Important:

これらのクラスは自動的に XML に投影されるので、追加の考慮事項が生じます。複数のクラスの短いクラス名 (つまり、パッケージのないクラス名) が同じである場合は、NAMESPACE パラメータがこれらのそれぞれのクラスで一意になるようにする必要があります。

この規則を適用する理由は、短いクラス名がグローバル XML 要素の名前になり、これらの要素は XML ネームスペース内で一意でなければならないためです。Caché では、XML 対応のクラスはそれぞれ、短いクラス名と NAMESPACE パラメータの一意の組み合わせを持つ必要があります。

メソッド名

インターシステムズのクラスは、大文字と小文字を使ってクライアント・メソッドとサーバ・メソッドを区別します。これらの規約にも従うと役に立つ場合があります。

メソッドの種類 メソッド名の規約
クライアント・メソッド (つまり、JavaScript で記述されたメソッド) 先頭文字は小文字で記述し、連続する各単語の先頭の文字は大文字で記述します (単語ごとの大文字化)。 myMethodName()
サーバ・メソッド (つまり、ObjectScript、Caché Basic、または Caché MVBasic で記述されたメソッド) 先頭文字は大文字で記述し、単語ごとの大文字化を使用します(または、先頭文字を % 文字で記述し、次の文字を大文字にします)。 MyMethodName または %MyMethodName

コンテンツ・オブジェクトと JSON プロバイダ

それぞれの documentView は、データ・オブジェクトとレイアウト・グラフの 2 つのコンテンツ・オブジェクトによって指定されます。これについては、このドキュメントの “テンプレート・システム” ですでに説明しています。これらのオブジェクトの名前は、コード内の複数箇所で一貫して使用する必要があるので、規約を設けておくと役に立ちます。1 つの方法は、以下のとおりです。

  • 主要な documentView のデータ・オブジェクトには document という名前を使用します。

  • 主要な documentView のレイアウト・グラフには layout という名前を使用します。

  • その他の documentView コンポーネントのコンテンツ・オブジェクトには、より具体的な名前を使用します。

もう 1 つの方法は、以下のとおりです。

  • componentid という ID を持つ documentView のデータ・オブジェクトには、componentidData という名前を使用します。

  • componentid という ID を持つ documentView のレイアウト・グラフには、componentidLayout という名前を使用します。

ページ・クラスには、それぞれのデータ・オブジェクトの JSON プロバイダが含まれている (PROVIDERLLIST パラメータによって) ことに注意してください。この理由から、データ・オブジェクトの名前は JSON プロバイダの名前にもなります。データ・オブジェクトJSON プロバイダという用語は同じ意味で使用されることがありますが、このドキュメントではデータ・オブジェクトのみを使用します。

キー

レイアウト・オブジェクトの多くにはキーを関連付けることができるため、結果としてアプリケーションに多数のキーが含まれる場合があります。これらのキーに対して名前付け規約を定めると特に役立ちます。単純なシステムは以下のようになります。

  • コードを読みやすくする名前を使用します。

  • コントロール内のキーの名前には動詞を使用します。

  • それ以外の場合には、キーの名前に名詞を使用します。

  • 関連したキーの名前には階層 (または半階層) セットを適用します。例えば、アカウントのテーブルを表示するレイアウト要素にはキー名 accounts を使用し、1 つのアカウントの詳細を表示するレイアウト要素にはキー名 account-detail を使用します。

Important:

キーの名前にコロン (:) 文字を含めることはできません。

FeedbackOpens in a new tab