ネイティブオブジェクトを使用すると、外部 JavaScript リソースのメソッドやプロパティを公開できます。その結果、これらのメソッドを GeneXus コードから呼び出すことができます。この機能はコードの統合に役立ち、外部リソースが提供する機能へのスムーズなアクセスを可能にします。
また、GeneXus のイベントを JavaScript のコードからトリガーすることもできます (「
外部オブジェクトを使用して JavaScript コードから GeneXus のイベントを実行する方法」を参照)。
JavaScript のメソッドを公開し、GeneXus からそのメソッドを容易に呼び出せるようにする場合です。
Web ユーザーコントロールの定義は、UI コントロールを実装する場合にのみ必要です。コード内でのみ JavaScript の関数やメソッドを使用する必要があり、UI は関係がない場合があります。このような場合は、JavaScript にマップした外部オブジェクトを使用します。
外部オブジェクトで、Java (または .NET) コードと JavaScript コードの両方のマッピングが定義されている場合に実際に実行されるコードに関する質問です。
これは、コードが生成されている階層に依存します (「
GeneXus X Evolution 3 におけるクライアント側でのイベント実行」を参照)。
- コードがクライアント側で生成されている場合、JavaScript コードがトリガーされます。
- コードがサーバー側で生成されている場合、Java (または .NET) コードが実行されます。
- JavaScript だけが外部オブジェクトにマップされ、コードがサーバー側で生成されている場合、実行はされますが、プロパティを読み取ることができず、メソッドが戻り値を返すことはできません。
- JavaScript のプロパティやメソッドを公開し、GeneXus のコードからアクセスできるようにするには、外部オブジェクトでそれらを宣言する必要があります。
- 外部 JavaScript ソースを使用するには、たとえば HeaderRawHTML フォームメソッドを使用して、HTML ヘッダーにその参照を追加する必要があります。
- 各プロパティ、メソッド、またはイベントについて [ JavaScript External Name ] プロパティを設定し、外部 JavaScript ソースへの対応を指定する必要があります。
- GeneXus オブジェクトで、外部オブジェクトに基づく変数を定義する場合は、JavaScript のコードでコンストラクターを定義する必要があります。
- JavaScript の外部コードから GeneXus イベントを呼び出す必要がある場合、次の操作を行います:
- 外部オブジェクトでイベントを宣言します。
- JavaScript の外部コードで gx.fx.obs.notify エクスプレッションを使用して GeneXus イベントに通知します。これが、JavaScript から GeneXus のイベントに通知できる唯一の方法です (gx .fx.obs.notify の定義は、標準の GeneXus JavaScript ライブラリ gxgral.js に含まれます)。
- GeneXus のイベントは常に静的なので、外部オブジェクトのイベント定義で [ IsStatic ] プロパティを TRUE に設定する必要があります。イベントは、メソッドと同じようにほかのイベントから呼び出すことができます。
JavaScript 機能の外部オブジェクトには多数の用途があります。その一部を紹介します:
キーと値のペアのコレクションから構成され、キーがコレクション内で重複しないデータタイプとして定義される辞書を実装します。この例の最も興味深い点は、サーバー側で .NET または Java のコードを実行し、クライアント側で JavaScript コードを実行することです。
この例については、「
JavaScript とサーバー側コードを使用して Dictionary データタイプを実装する方法」を参照してください。
これは、ウィンドウを操作して GeneXus で適切なイベントを実行する標準的な例です。この例は、具体的には、
スクロールイベントの操作方法を示します。
この例については、「
外部オブジェクトを使用して JavaScript コードから GeneXus のイベントを実行する方法」を参照してください。
「
ウィンドウオブジェクトのメソッドを操作する方法」を参照してください。
1. error spc0200: External Object X does not implement method 'scroll(' for C# Web environment ).
Specification Failed
原因: このエラーは、JavaScript 外部名を外部オブジェクトのイベントに割り当てなかった場合に発生します。
2. TypeError: X is not a constructor
原因: GeneXus 内のオブジェクトで、X 外部オブジェクトに基づく変数が定義されている場合、外部オブジェクトにリンクしている JavaScript でコンストラクター機能を定義する必要があります。これは、オブジェクトに生成される JavaScript コードで
new コマンドが実行されるためです。
3. 外部プロジェクトが正常に機能していない場合は、ブラウザーの JavaScript デバッグツールを使用します。問題の原因として、ソースコードの構文エラーが原因で JavaScript がロードされていない可能性があります。