この章では、フォームの相互関係をもう少し具体的に図式化して説明します。
表記法
フレームの相互関係を図式化する際に使用する表記法を説明します。
ボックス
コレクション上の項目です。ここの’Item’という文字は実際の名前とは関係ありません。 |
連結線
1:1の連結、菱形の方が子になります。 | |
1:Nの連結、円の方が子になります。 |
説明
アイテム間のスクリプト文法を連結線の上に表記します。
親から子へのスクリプトはPrefixなしに表記します。
子から親へのスクリプトは"▲" Prefixを使用します。
上の表記は以下のような意味です。
親と子は1:Nの関係です。
スクリプト上で"parents.id"で子にアクセスすることができます。
スクリプト上でparents.child[index]で子にアクセスすることができます。
スクリプト上でchild.parentで親にアクセスすることができます。
用語の定義
用語 | 説明 |
---|---|
エレメント | コンポーネントのプロパティ、メソッド、イベントを総称してコンポーネントのエレメントと言います。 |
共通で使用するSyntax
配列表示"[", "]"は、代用として"(", ")"を使用することができます。
即ち、this.all[0]はthis.all(0)と同一です。
"[", "]"と"(", ")"内にはインデックスまたは"id"を入れることができます。
即ち、this.all[0]とthis.all["btn0"]は全て同一コンポーネントを指すことができます。
フォーム
関係図
一般のフォームの場合
コンテナコンポーネントの場合
スクリプトの例示画面
インデックスの順序をbtn0, btn1, cmb0, dtset1, bind1, div0, div1と仮定します。
1つのフォームの中の同レベルでは、idが重複してはなりません。しかし、btn0とdiv0_btn0とdiv2_btnは同レベルではないので、同じidで指定しても差し支えありません。
コンポーネント / invisibleオブジェクト / bindのスクリプトアクセス
this.classname == "frm0" this.name == "frm0"
btn0へのアクセス
this.all["btn0"].name == "btn0" this.all[0].name == "btn0" this.btn0.name == "btn0" this.components[0].name == "btn0" this.components["btn0"].name == "btn0"
dtset1へのアクセス
this.all["dtset1"].name == "dtset1" this.all[3].name == "dtset1" this.dtset1.name == "dtset1" this.objects[0].name == "dtset1" this.objects["dtset1"].name == "dtset1"
コンポーネント / invisibleオブジェクト / bindの個数
this.all.length == 7 this.components.length == 5 //btn0, btn1, comb0, div0, div1 this.binds.length == 1
コンテナコンポーネントへのスクリプトアプローチ
フォームがないコンテナコンポーネントはinvisibleオブジェクトとbindを持つことができず、コンポーネントのみ持つことができます。
div0内のdiv0_btn0へのアプローチ
this.div0. btn0.name== "div0_btn0" this.div0.all[0]. name == "div0_btn0" this.components[3].components[0]. name == "div0_btn0"
div2内のdiv2_btn0へのアプローチ
this.div0.div2.div2_btn0.name == "div2_btn0" this.all["div0"].all["div2"].all["div2_btn0"].name == "div2_btn0" this.components["div0"].components["div2"].components["div2_btn0"].name == "div2_btn0"
フォームを乗せたコンテナコンポーネントへのスクリプトアプローチ
frm1にあるdtset1のアプローチ (frm1内のスクリプトである場合)
this.name== "div1" // この値は、フォームを乗せたコンテナコンポーネントのidであるため、値が可変的です。 this.btn0.name== this.all["btn0"].name == "btn0"
frm1にあるdtset1のアプローチ (frm0内のスクリプトからアプローチする場合)
this.name == "frm0" this.div1.btn0.name == "btn0" //"frm1"を含んでいる"div1"でのみアクセスすることができます。
親スクリプトの使用
this.div1.dtset2.parent.parent.classname == "frm0" this.div1.dtset2.parent.name == "div1"// frm1はdiv1に乗ることによってその特性を失います。 this.div1.dtset2.parent.classname == undefined// frm1はdiv1に乗せながらその特性を失い、classnameが存在しなくなります。 this.div1.dtset2.parent.name == "div1"
コンテナコンポーネントのエレメントの使用
フォームを持ったコンテナコンポーネントは、フォームのようにコンポーネント、invisibleオブジェクト、bind(以下、エレメント)を持つことができます。
フォームを持たないコンテナコンポーネントはinvisibleオブジェクトとbindを持つことができず、コンポーネントのみ持つことができます。
コンテナ機能のないコンポーネント、invisibleオブジェクト、bindはエレメントを持つことができません。
コンテナコンポーネントは乗せられたフォームの特性を持つようになります。
フォームスクリプトにてthisでアクセスする場合には、フォーム内部のエレメントのみならずコンテナコンポーネントのエレメントにもアクセスすることができます。
コンテナコンポーネントが属するフォームにthis.コンポーネント名でアクセスする場合に乗っているフォームの全てのエレメントにアクセスすることができます。
シングルフレーム形式のアプリケーション
関係図
フォーム内のコンポーネント / bind / invisibleオブジドェクトは.getOwnerFrame()ですが、.getOwnerForm()はありません。
スクリプトの例示画面
シングルフレームの場合には、MainFrameはChildFrameとTabFrameの中から1つだけ持つことができます。
applicationからフォームのスクリプトアクセス
frm0へのアクセス(ChildFrameの場合)
application.mainframe.frame.form.name =="frm0" application.mframe0.frame.form.name == "frm0" application.mframe0.chdframe0.form.name == "frm0" application.all[0].all[0].form.name == "frm0" application.all["mframe0"].all["chdframe0"].form.name == "frm0" mainframe.frame.form.name == "frm0"
frm1へのアクセス(TabFrameの場合)
application.mainframe.frame.tabframepages[0].form.name == "frm1" application.mainframe.frame.tabframepages["tabframeP0"].form.name == "frm1" application.all[0].all[0].all[0].form.name == "frm1" application.all["mframe0"].all["tabframe0"].all["tabframeP0"].form.name == "frm1"
formからapplicationのスクリプトアクセス
frm0からapplicationにアクセス(ChildFrameの場合)
this.parent.name == "chdframe0" this.parent.parent.name == "mframe0" this.getOwnerFrame().getOwnerFrame().name == "mframe0" this.getOwnerFrame().getOwnerFrame().parent.mainframe.name == "mframe0"
frm1からmainframeにアクセス(TabFrameの場合)
this.parent.name == "tabframeP0" this.parent.parent.name == "tabframe0" this.parent.parent.parent.name == "mframe0" this.getOwnerFrame().getOwnerFrame().getOwnerFrame().name == "mframe0"
マルチフレーム形式のアプリケーション
関係図
スクリプトの例示画面
frameset_nのそれぞれのフレームセットは、"frameset0"の構造を持つことができます。
frames[]を除いてはシングルフレームと同一方法でアクセスします。
applicationからformのスクリプトアプローチ
application.mainframe.frame == application.mainframe.frameset0
frm1へのアクセス
application.mainframe.frame.chdframe0.form.name== "frm1" // application.mainframe.frame.frames[0].form.name == "frm1" application.mainframe.frame.frames["chdframe0"].form.name == "frm1"
frm2へのアクセス
application.mainframe.frame.frames[1].tabframepages[0].form.name == "frm1"
Modal、Modaless形式のフォーム
関係図
入れ子ChildFrameでのスクリプトの使用法
入れ子ChildFrameの生成及び削除方法
// ********** ChildFrameを生成します。*************** var frameobj = new ChildFrame("childfrm0", 10, 10, 100, 100, "url"); もしくは var frameobj = new ChildFrame("childframe"); frameobj.init ("childframe", 10, 10, 100, 100); // ********** ChildFrameをフォームセットに連結します。 ********** mainframe.frameset.addChild("chd0", frameobj); もしくは frameset.inertChild(1, "chd0", frameobj); // ********** ChildFrameを画面に出力します。********** frameobj.show(); // ********** ChildFrameを画面から削除します。 ********** mainframe.frameset.removeChild("chd0"); frameobj.destroy(); frameobj = null;
スクリプトフロー
modal/modalessチャイルドフレームでのスクリプトの使用法
modal / modalessチャイルドフレームの生成方法
var frameobj = new ChildFrame("childfrm0", 10, 10, 100, 100, "url"); もしくは var frameobj = new ChildFrame("childframe"); frameobj.init ("childframe", 10, 10, 100, 100); var parentframeobj = mainframe.frameset.ChildFrame0; frameobj.showModal(parentframeobj); もしくは frameobj.showModeless(parentframeobj);
スクリプトフロー