プロパティ、メソッド、イベントの追加

本章では、コンポジット・コンポーネントにプロパティ、メソッド、イベントを追加する方法を説明します。

プロパティ追加

文字列プロパティ追加

Calendarコンポーネントで選択した値(value)にすぐにアクセスできるプロパティを追加します。プロパティ名はfromValue、toValueです。

1

メニューの[Edit > Add > Property]項目を選択し、プロパティ追加ウィザードを実行します。

Project Explorerでオブジェクトを選択し、コンテキストメニューで[Add > Property]項目を選択することもできます。

2

Target Object項目に表示されたオブジェクトが選択したのであるかを確認し、Property Name項目に追加するプロパティ名を入力します。

Property Information項目では、プロパティに関する情報を設定することができます。例題では、プロパティ関連情報はデフォルト値を保持します。

「Make setter function in a module scripts」項目では、プロパティのSetter Function スケルトンコードを自動生成するかどうかを設定します。MetaInfo項目のunused、readonly、initonlyの中で一つでもtrueに設定した場合、該当チェックボックスは無効化されます。

チェックボックスが無効になったりチェックを解除した場合には、次のステップでxcdlファイルに該当コードは追加されません。

3

[Finish]ボタンをクリックすると、指定したプロパティが追加され、MetaInfo項目にプロパティが追加されます。

4

xcdlファイルでClass Definitionタブが有効化されて、挿入されたコードを確認できます。

5

スクリプトを下記のように修正します。

使用者がfromValueプロパティ値を設定する場合、該当プロパティ値をCalendarコンポーネントのvalue値で渡します。

nexacro.TwoMonthCalendar.prototype.fromValue = undefined;
nexacro.TwoMonthCalendar.prototype.set_fromValue = function (v)
{
	if(this.form.calFrom)
	{
		this.form.calFrom.set_value(v);
	}
	this.fromValue = v;
};

6

デザインタブでCelendarコンポーネントを選択し、onchangedイベント関数を下記のように生成します。生成されたイベント関数は、Scriptタブで確認できます。

Calendar コンポーネントで選択した値が変更された場合、値をfrom Valueプロパティ値に保存します。

this.calFrom_onchanged = function(obj:nexacro.Calendar,e:nexacro.ChangeEventInfo)
{
	this.parent.set_fromValue(e.postvalue);
};

ScriptでthisキーワードはFormオブジェクトを指しています。そのため、コンポジット・コンポーネントのプロパティにアクセスするためにはthis.parentでアクセスしてください。

7

エミュレータを実行し、最初のCalendarコンポーネントで日付を選択し、コンソールウィンドウでプロパティ値を確認します。

8

2番目のCalendarコンポーネントに該当するプロパティを追加し、コードを追加します。

Enumプロパティ追加

Enumプロパティは、値を列挙型(enumeration)で指定できるプロパティを意味します。たとえば、Calendarコンポーネントのtypeプロパティ値は「normal | monthonly | spin」の3つの値の中から選択できますが、あらかじめ指定できるプロパティ値をEnumInfoプロパティとして追加して使います。

Calendarコンポーネントのスタイルを変更できるプロパティを追加します。 プロパティ名はcolorThemeです。プロパティを追加する前にEnumInfoから追加する必要があります。

スタイル関連コードは下記のリンクをご参照ください。下記の説明では、xcssコードをあらかじめ作成しておいたという前提に説明します。

コンポーネントの個別スタイルの設定

1

Project ExplorerでMetaInfo項目の下にオブジェクト名をダブルクリックするか、コンテキストメニューから「Edit」項目を選択してメタインフォエディタを実行します。

2

エディタの右側の「Edit Common Information」アイコンをクリックします。

3

「+」ボタンをクリックし、「Add Info Item」を選択し、編集ウィンドウで「ColorTheme」という項目を追加します。

4

追加したEnum項目を選択し、コンテキストメニューから「Add」項目を選択した後、「Add Enum Item」ウィンドウで「orange」、「purple」を追加します。

5

メニューの「Edit > Add > Property」項目を選択し、プロパティ追加ウィザードを実行します。

6

Property Information項目でEdit Typeを「Enum」に変更し、Enuminfoは前回に生成した「ColorTheme」を選択します。

7

生成されたスクリプトを下記のように修正します。

選択した値に応じてCalendarコンポーネントで使用するcssclassプロパティ値を変更します。

nexacro.TwoMonthCalendar.prototype.colorTheme = "";
nexacro.TwoMonthCalendar.prototype.set_colorTheme = function (v)
{
	var _cssclass = "";
	if(v=="purple")
	{
		_cssclass = "simple_module, simple_module_purple";
	}
	else
	{
		_cssclass = "simple_module";
	}
	
	if(this.form.calFrom && this.form.calTo)
	{
		this.form.calFrom.set_cssclass(_cssclass);
		this.form.calTo.set_cssclass(_cssclass);
	}
	this.colorTheme = v;
};

8

エミュレータを実行し、colorThemeプロパティ値を変更した時にスタイルが適切に適用されるか確認します。

コンポーネントを実行する際にプロパティ値を処理

下記のようにインターフェイス関数を追加して実行する際にプロパティ値として設定した値が反映されるようにします。

nexacro.TwoMonthCalendar.prototype.on_create_contents = function ()
{
	nexacro._CompositeComponent.prototype.on_create_contents.call(this);
	this.set_fromValue(this.fromValue);
	this.set_toValue(this.toValue);
	this.set_colorTheme(this.colorTheme);
};

メソッド追加

パラメータなしのメソッド(getDayCount)を追加

Calendarコンポーネントで選択した値(value)の差を計算して返すメソッドを追加します。メソッド名は、getDayCountです。

1

メニューの「Edit > Add > Method」項目を選択して、メソッド追加ウィザーズを実行します。

Project Explorerからオブジェクトを選択し、コンテキストメニューから「Add > Method」を選択することもできます。

2

Target Objectに表示されたオブジェクトが選択したのが正しいかを確認し、Method Nameに追加するメソッド名を入力します。

Method Informationでは、メソッド関連情報を設定できます。例題では、2つのCalendarコンポーネントから選択した日付の間の差を計算して返すメソッドを作成します。Return Information項目でTypeの値を「Integer」に設定します。

「Make setter function in a module scripts」では、メソッドのFunctionスケルトンコードを自動生成するかどうかを設定します。メタインフォunusedを「true」に設定した場合、該当チェックボックスは無効になります。

チェックボックスが無効、もしくはチェックを解除した場合には、次のステップxcdlファイルに該当コードは追加されません。

3

「Finish」ボタンをクリックします。指定したメソッドが追加されて、Class Definitionタブが有効になります。

「Next」ボタンをクリックすると、メソッドで使用するパラメータを指定できます。例題ではパラメータを使用せず、該当ステップをスキップしました。

4

スクリプトを下記のように修正します。

2つのCalendarコンポーネントの値を比較し、差分を返します。

nexacro.TwoMonthCalendar.prototype.getDayCount = function ()
{
	var fromDate = new Date();
	var toDate = new Date();
	var calDate;
	var day = 1000*60*60*24;
	var returnvalue = -1;
    
	if(this.form.calFrom.value && this.form.calTo.value)
	{
		fromDate.setFullYear(this.form.calFrom.getYear());
		fromDate.setMonth(this.form.calFrom.getMonth()-1);
		fromDate.setDate(this.form.calFrom.getDay());
		
		toDate.setFullYear(this.form.calTo.getYear());
		toDate.setMonth(this.form.calTo.getMonth()-1);
		toDate.setDate(this.form.calTo.getDay());
	
		calDate = fromDate.getTime() - toDate.getTime();
		trace("calDate: "+calDate);
		
		returnvalue = Math.abs(calDate/day);
	}
	trace("returnvalue: "+returnvalue);
	return returnvalue;
};

5

エミュレータを実行し、最初のCalendarコンポーネントと2番目のCalendarコンポーネントで日付を選択し、コンソールウィンドウで追加したメソッドを呼び出して返される値を確認します。

コンソールウィンドウでメソッド名を入力する際に、IntelliSense機能が動作することも確認できます。

パラメーター付きメソッド(addDay)の追加

最初のCalendarコンポーネントで選択した値(value)にパラメータで送信された日付だけを加えて2番目のCalendarコンポーネント値に設定するメソッドを追加します。メソッド名はaddDayです。

1

メニューの「Edit > Add > Method」項目を選択し、メソッド追加ウィザードを実行します。

Project Explorerでオブジェクトを選択し、コンテキストメニューから「Add > Method」項目を選択することもできます。

2

Target Object項目に表示されたオブジェクトが選択したオブジェクトであるか確認して、Method Name項目に追加するメソッド名を入力します。

Method Information項目ではメソッド関連情報を設定できます。例題では、最初のCalendarの日付にパラメータとして渡された数字を加えて2番目のCalendarコンポーネントに設定し、結果値を返します。Return Information項目でTypeの値を「Boolean」に設定します。

3

「Next」ボタンをクリックします。パラメータを指定できる画面が表示されます。

Arguments項目で、「+」ボタンをクリックしてパラメータを追加し、Type項目を「Integer」に設定します。

パラメータを追加する際にはarg00形式で名前が付けられますが、項目を選択して、コンテキストメニューから「Rename」項目を選択すると、名前を変更することができます。例題では、名前をnDayに変更しました。

パラメータが複数である場合は、上下矢印を利用して順序を変更することができます。

4

「Finish」ボタンをクリックします。指定したメソッドが追加され、Class Definitionタブが有効になります。

5

スクリプトを下記のように修正します。

最初のCalendarコンポーネント値にパラメータに渡された値を加え、2番目のCalendarコンポーネント値として指定します。

nexacro.TwoMonthCalendar.prototype.addDay = function (nDay)
{
	var fromDate = new Date();
	var toDate = new Date();
		
	if(this.form.calFrom.value)
	{
		fromDate.setFullYear(this.form.calFrom.getYear());
		fromDate.setMonth(this.form.calFrom.getMonth()-1);
		fromDate.setDate(this.form.calFrom.getDay());
		toDate = new Date(fromDate.addDate(nDay));
			
		var year = toDate.getFullYear().toString().padLeft(4, "0");
		var month = (toDate.getMonth()+1).toString().padLeft(2, "0");
		var day = toDate.getDate().toString().padLeft(2, "0");			
			
		this.form.calTo.set_value(year+month+day);
		return true;
	}
	else
	{
		trace("calFrom value is null");
		return false;
	}
};

6

エミュレータを実行し、最初のCalendarコンポーネントで日付を選択した後、コンソールウィンドウで追加したメソッドを呼び出し、2番目のCalendarコンポーネントに値が設定されるかを確認します。

イベント追加

Calendarコンポーネントで値が変更された場合(onchanged)、それを確認できるイベントを追加します。イベント名は、onchangedです。

1

メニューの「Edit > Add > Event」項目を選択し、イベント追加ウィザードを実行します。

Project Explorerでオブジェクトを選択し、コンテキストメニューから「Add > Event」項目を選択することもできます。

2

Target Object項目に表示されたオブジェクトが選択したオブジェクトであることを確認し、Event Name項目に追加するイベント名を入力します。

イベントによって戻り値がある場合には、Return InformationのTypeを設定してください。例題では戻り値がないため、該当の項目の設定は不要です。

3

「Next」ボタンをクリックして、イベントが発生するオブジェクトとEventInfoオブジェクトを指定します。該当項目を指定せずに「Finish」ボタンをクリックした場合は、nexacro.EventInfoオブジェクトをデフォルト値として適用します。

例題では、項目をnexacro.ChangeEventInfoに変更しました。

4

「Finish」ボタンをクリックすると、基本スクリプトが下記のように追加され、Class Definitionタブが有効になります。

まず、コンポジットコンポーネントを初期化する関数に、this.addEventというメソッドを呼び出します。コンポーネント内部にイベントリストを管理する変数がありますが、addEventメソッドが実行されて該当リストにイベントを追加します。

そして、コードの下に下記のイベント関数を追加します。

5

下記のようにスクリプトを修正します。

nexacro.TwoMonthCalendar.prototype.on_fire_onchanged = function (obj, pretext, prevalue, posttext, postvalue)
{
	if (this.onchanged && this.onchanged._has_handlers)
	{
		var evt = new nexacro.ChangeEventInfo(obj, "onchanged", pretext, prevalue, posttext, postvalue);
		return this.onchanged.fireEvent(this, evt);
	}
	return false;
};

6

Calendarコンポーネントのonchangedイベント関数を追加し、下記のコードを追加します。

onchangedイベント関数は、「プロパティ追加」の例を説明するうちに追加しました。既に追加された場合には、変更されたコードのみ追加してください。

this.calFrom_onchanged = function(obj:nexacro.Calendar,e:nexacro.ChangeEventInfo)
{
	this.parent.set_fromValue(e.postvalue);
	this.parent.on_fire_onchanged(obj, e.pretext, e.prevalue, e.posttext, e.postvalue);
};

this.calTo_onchanged = function(obj:nexacro.Calendar,e:nexacro.ChangeEventInfo)
{
	this.parent.set_toValue(e.postvalue);
	this.parent.on_fire_onchanged(obj, e.pretext, e.prevalue, e.posttext, e.postvalue);
};

追加したイベントはエミュレータでテストできず、モジュール配布後にアプリで確認できます。

モジュールインストール後に追加したプロパティ、メソッド、イベントを確認

nexacro studioでモジュールをインストールした後に追加したプロパティ、メソッド、イベントをどのように使用するか説明します。

プロパティウィンドウに追加したプロパティ、メソッドの表示

プロパティウィンドウに追加したプロパティとイベントが表示されます。 値を指定すると、デザインタブで値が変更されることが確認できます。

colorThemeプロパティ項目を選択すると、ドロップダウンリストで指定されたプロパティ値が表示されるか確認できます。値を選択すると、nexacro studioのデザインウィンドウで変更されたスタイルが適用されます。

IntelliSense動作時に追加したプロパティ、メソッド、イベント表示

スクリプトタブでIntelliSense動作時に追加したプロパティやメソッド、イベントが表示されることも確認できます。

メソッド動作を確認

メソッドの呼び出し時に正常に値を返すことも確認できます。

1

nexacro studioでForm画面を生成します。

2

コンポジットコンポーネントを画面に配置します。

3

ボタンコンポーネントを画面に配置して、onclickイベント関数を下記のように作成します。

this.Button00_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	trace(this.TwoMonthCalendar00.getDayCount());
};

4

QuickView(Ctrl+F6)でアプリを実行し、2つのカレンダーから日付を選択してボタンをクリックします。

メソッドの実行結果は、ブラウザの開発者ツールコンソール画面で確認できます。

イベント動作を確認

1

nexacro studioでForm画面を生成します。

2

コンポジットコンポーネントを画面に配置します。

3

コンポジットコンポーネントのonchangedイベント関数を下記のように作成します。

this.TwoMonthCalendar00_onchanged = function(obj:nexacro.TwoMonthCalendar, e:nexacro.ChangeEventInfo)
{
	trace("e.fromobject.id: "+e.fromobject.id);
	trace("e.prevalue: "+e.prevalue);	
	trace("e.postvalue: "+e.postvalue);
};

4

QuickView(Ctrl+F6)でアプリを実行し、2つのカレンダーで日付を選択する際にイベントが発生するか確認します。

メソッドの実行結果は、ブラウザの開発者ツールコンソール画面で確認できます。

MetaInfo編集(プロパティ、メソッド、イベント)

プロパティ、メソッド、イベントを追加するウィザードで詳細項目を設定できることをMetaInfoと言います。Project ExplorerでMetaInfoファイルの下にあるオブジェクトのProperty、Method、Event項目を選択してダブルクリックすると、詳細項目が編集できます。

オプションに基づいて表示されるリストを選択して表示することができます。

項目

説明

All

すべての項目を表示します。

Inheritance

継承した項目のみ表示します。

Owned

新たに追加した項目のみ表示します。

プロパティ

項目

説明

Group

プロパティのカテゴリを指定します。

指定しない場合はその他(Misc)として処理します。

指定できる詳細項目は、表の下のノートをご参照ください。

Subgroup

nexacro studioでinnerdatasetプロパティの編集時に使用します。

プロパティウィンドウでComboコンポーネントのinnerdatasetプロパティ項目の右側にあるボタンをクリックして編集ウィンドウを表示する場合、subgroup項目の値が「bind(innerdataset)」形式で指定されたプロパティを表示します。

Edit Type

プロパティウィンドウの編集タイプを指定します。

たとえば、leftプロパティの場合、positionBaseに指定されており、プロパティウィンドウで数字、単位、positionBaseプロパティを指定することができます。指定できる詳細項目は、表の下のノートをご参照ください。

Default Value

プロパティのデフォルト値を指定します。

プロパティを追加する場合、スクリプト作成時のデフォルト値を指定します。スクリプト生成後にdefaultvalue項目値を修正する場合には、影響を及ぼしません。

Unused

継承時に下位で使用するかどうかを指定します。

ReadOnly

読み取り専用プロパティであるかどうか指定します。

InitOnly

初期設定専用であるかどうか指定します。

例えば、initvalueidプロパティ値は画面に表示される前の初期値の設定のみ使用します。

Hidden

プロパティウィンドウの表示有無を指定します。

プロパティウィンドウには表示しませんが、スクリプトでアクセスできます。

例えば、スクリプトからコンポジットコンポーネントのformプロパティにアクセスすることはできますが、プロパティウィンドウには表示されません。

Control

プロパティ自体がオブジェクト(またはコントロール)であるかどうか指定します。

該当項目の値が「true」である場合、readonly項目は「true」、hidden項目は「false」に指定します。

例えば、コンポジットコンポーネントのformプロパティがオブジェクトなので、「true」に指定されています。

Expression

exprを使用するかどうか指定します。

「true」である場合には、プロパティウィンドウに「set expression」ボタンが表示され、expr値を編集できます。

Bind

バインドされたDatasetオブジェクトがColumnバインド機能を使用するかどうか指定します。

Datasetオブジェクトとバインドされた場合、プロパティウィンドウで連結するColumn項目をドロップダウンリストから選択できます。

Mandatory

nexacro studioでコンポーネントを配置する際、XMLコードに該当プロパティを生成するかどうか指定します。

Refresh Properties

プロパティ値の変更時に影響を受けるプロパティがある場合に指定します。

影響を受けたプロパティ情報は、RefreshInfo.infoファイルで別途管理します。

Enuminfo

edittype項目を「Enum」に指定した場合は、選択できるEnumInfo情報を指定します。

プロパティウィンドウでは、ドロップダウンリストで表示されて、項目を選択します。

Enuminfo2

edittype項目を「Enum2」に指定した場合は、選択できるEnumInfo情報を指定します。

プロパティウィンドウでは、下図のような2つの項目をドロップダウンリストから選択できます。

UnitInfo

プロパティに指定する単位が固定された場合に選択できるUnitInfo情報を指定します。

プロパティウィンドウの右側に単位を表示したり、最小・最大値を指定できます。

Delimiter

edittype項目を「Number2」に指定した場合、1つ以上の値をプロパティ値として指定できますが、この時各プロパティ値の区切り文字を指定します。

Requirement

サポートする実行環境をコンマ区切り文字で指定します。

プロパティウィンドウでプロパティ名の上にマウスカーソルを置いたり、スクリプトタブでintellisense機能を動作したときにツールチップテキストの形でサポートする実行環境を表示します。

Css Property Name

スタイルプロパティの場合、CSSプロパティ名を指定します。

CSSプロパティ名は一般的なプロパティ名とは違う命名規則を持っていて、開発便宜のために一般プロパティ名とCSSプロパティ名を区分して管理します。

例えば、borderプロパティのCSSプロパティ名は「-nexa-border」です。

Normal Property Name

nexacro studioでXFDLファイルに明示される名前です。

省略すると、name項目と同じ値を使用します。

Description

プロパティに関する簡単な説明です。

プロパティウィンドウでプロパティ項目を選択すると、下段のdescription領域にテキストを表示するか、スクリプトタブでintellisense 機能が動作すると表示されます。

group項目として指定できる値は、下記のとおりです。

- Accessibility, Action, Appearance, Binding, Collection, Communication, Control, EventInfo, Hidden, Information, Misc, Normal, Position, SandBox, Style

edittype項目として指定できる値は、下記のとおりです。

Accessibility, Boolean, ColumnID, Contents, ContentsParam, CssClass, DataObjectID, DataObjectPath, DatasetID, Enum, Enum2, FileName, FormatID, Hotkey, ID, IconID, ImageID, InitvalueFileID, InitvalueID, InnerColumnID, InnerDatasetID, Line, LiteDBConnectionID, LiteDBParameters, ModelServiceID, MultiEnum, MultilineString, Number, Number2, Number2Unit, NumberUnit, Position, PositionBase, ProgID, ScreenID, String, StringEnum, SvgPath, ThemeID, URL, UserFontID, Variant, ViewChildObjList, ViewObjList

メソッド

項目

説明

Group

メソッドのカテゴリを指定します。

現在はモジュールの動作に影響を及ぼしません。

Unused

継承時に下位で使用するかどうか指定します。

Async

同期化処理の実行有無を指定します。

現在はモジュールの動作に影響を及ぼしません。

Requirement

サポートする実行環境をコンマ区切り文字で指定します。

スクリプトタブでintellisense機能が動作した場合、ツールチップテキストの形でサポートする実行環境を表示します。

Description

メソッドに関する簡単な説明です。

スクリプトタブでintellisense機能が動作した時に表示します。

イベント

項目

説明

Group

イベントカテゴリを指定します。

デフォルト値は「Event」に指定されます。

Unused

継承時に下位で使用するかどうか指定します。

Requirement

サポートする実行環境をコンマ区切り文字で指定します。

プロパティウィンドウでイベント名の上にマウスカーソルを置いたり、スクリプトタブでintellisense機能を実行する場合、ツールチップテキスト形式でサポートする実行環境を表示します。

Description

イベントに関する簡単な説明です。

スクリプトタブでintellisense機能が動作した時に表示します。