Frame Tree

이 장에서는 Form들의 상호관계를 좀 더 구체적으로 도식화하여 설명합니다.

표기법

Frame의 상호관계를 도식화 할 때 사용하는 표기법을 설명합니다.

box

collection상의 Item으로 실제 이름을 의미하지는 않습니다

연결선

1:1 연결, 마름모 쪽이 Child가 됩니다.

1:N 연결, 원 쪽이 Child가 됩니다.

설명

위 표기는 다음을 의미합니다.

용어정의

용어

설명

element

component의 property, method, event를 통칭하여 component의 element라고 합니다.

공통으로 사용하는 Syntax

Form

관계도

Script 예시 화면

index순서를 btn0, btn1, cmb0, dtset1, bind1, div0, div1으로 가정한다.

한 form에서 같은 level에서만 id가 중복될 수 없다. 즉, btn0와 div0_btn0와 div2_btn은 동일 Level이 아니므로, 같은 id로 지정하여도 무방합니다.

component / invisible object / bind 의 Script 접근

this.classname == "frm0"
this.name == "frm0"
this.all["btn0"].name == "btn0"
this.all[0].name == "btn0"
this.btn0.name == "btn0"
this.components[0].name == "btn0"
this.components["btn0"].name == "btn0"
this.all["dtset1"].name == "dtset1"
this.all[3].name == "dtset1"
this.dtset1.name == "dtset1"
this.objects[0].name == "dtset1"
this.objects["dtset1"].name == "dtset1"
this.all.length == 7
this.components.length == 5 //btn0, btn1, comb0, div0, div1
this.binds.length == 1

container component에 Script 접근

form을 연결하지 않은 container component는 invisible object / bind를 가질 수 없고 component만 가질 수 있다.

this.div0. btn0.name== "div0_btn0"
this.div0.all[0]. name == "div0_btn0"
this.components[3].components[0]. name == "div0_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"

form을 연결한 container component에 Script 접근

this.name== "div1" // 이 값은 form을 연결한 container component의 id이므로 값이 가변적입니다.
this.btn0.name== this.all["btn0"].name == "btn0"
this.name == "frm0"
this.div1.btn0.name == "btn0" //"frm1"을 흡수한 "div1"으로만 접근할 수 있습니다.

parent의 Script 사용

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"

container component의 element사용

form을 연결한 container component는 form처럼 components, invisible object, bind (이하 element)를 가질 수 있습니다.

form을 연결하지 않은 container component는 invisible object, bind를 가질 수 없고 component만 가질 수 있습니다.

container기능이 없는 component와 invisible object, bind는 element를 가질 수 없습니다.

container component는 연결된 form의 특성을 갖게 됩니다.

Single Frame 형식의 Application

관계도

form내의 component / bind / invisible object는 .getOwnerFrame()이나 .getOwnerForm()이 없습니다.

Script 예시 화면

single Frame 의 경우 MainFrame은 ChildFrame, TabFrame 중 한 개만 가질 수 있습니다.

application에서 form의 script 접근

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"
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의 script 접근

this.parent.name == "chdframe0"
this.parent.parent.name == "mframe0"
this.getOwnerFrame().getOwnerFrame().name == "mframe0"
this.getOwnerFrame().getOwnerFrame().parent.mainframe.name == "mframe0"
this.parent.name == "tabframeP0"
this.parent.parent.name == "tabframe0"
this.parent.parent.parent.name == "mframe0"
this.getOwnerFrame().getOwnerFrame().getOwnerFrame().name == "mframe0"

Multi Frame형식의 Application

관계도

Script 예시 화면

frameset_n의 각 FrameSet은 "frameset0"의 구조를 가질 수 있습니다.

frames[]를 제외하고는 single frame과 동일한 방법으로 접근합니다.

application에서 form의 script 접근

application.mainframe.frame == application.mainframe.frameset0
application.mainframe.frame.chdframe0.form.name== "frm1" //
application.mainframe.frame.frames[0].form.name == "frm1"
application.mainframe.frame.frames["chdframe0"].form.name == "frm1"
application.mainframe.frame.frames[1].tabframepages[0].form.name == "frm1"

Modal, Modaless 형식의 Form

관계도

nested ChildFrame에서 Script 사용법

// ********** ChildFrame을 생성합니다.***************
var frameobj = new ChildFrame("childfrm0", 10, 10, 100, 100, "url");
or
var frameobj = new ChildFrame("childframe");
frameobj.init ("childframe", 10, 10, 100, 100);

// ********** ChildFrame을 Frameset에 연결합니다. **********
mainframe.frameset.addChild("chd0", frameobj);
or 
frameset.inertChild(1, "chd0", frameobj);

// ********** ChildFrame을 화면에 보여줍니다. **********
frameobj.show();

// ********** ChildFrame을 화면에 보여줍니다. **********
mainframe.frameset.removeChild("chd0");
frameobj.destroy();
frameobj = null;

modal/modaless ChildFrame에서 Script 사용법

var frameobj = new ChildFrame("childfrm0", 10, 10, 100, 100, "url");
or 
var frameobj = new ChildFrame("childframe");
frameobj.init ("childframe", 10, 10, 100, 100);
var parentframeobj = mainframe.frameset.ChildFrame0;
frameobj.showModal(parentframeobj);
or
frameobj.showModeless(parentframeobj);