Frame Tree

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

표기법

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

box

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

연결선

설명

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

용어정의

용어

설명

element

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

공통으로 사용하는 Syntax

Form

관계도

frame_tree_form

frame_tree_form_div

Script 예시 화면

frame_tree_script_01

인덱스 순서는 dtset1, btn0, btn1, cmb0, div0, div1, bind1으로 가정합니다.

일반적인 폼에서 인덱스 순서는 Dataset이 가장 먼저 오고 나머지 컴포넌트는 배치된 순서대로 정해지며 Bind 오브젝트가 마지막에 지정됩니다.

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

component / invisible object / bind 의 Script 접근

this.classname == "frm0"
this.name == "frm0"
// btn0으로의 접근
this.all["btn0"].name == "btn0"
this.all[1].name == "btn0"
this.btn0.name == "btn0"
this.components[0].name == "btn0"
this.components["btn0"].name == "btn0"
// dtset1으로의 접근
this.all["dtset1"].name == "dtset1"
this.all[0].name == "dtset1"
this.dtset1.name == "dtset1"
this.objects[0].name == "dtset1"
this.objects["dtset1"].name == "dtset1"
// component / invisible object / bind의 개수
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를 가질 수 있습니다.

// div0내의 div0_btn0으로의 접근
this.div0.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"

form을 연결한 container component에 Script 접근

// (frm1안의 script인 경우) frm1에 있는 btn0의 접근
this.name == "div1"
this.btn0.name == "btn0"
this.all["btn0"].name == "btn0"
// (frm0안의 script에서 접근할 경우) frm1에 있는 dtset1의 접근
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의 특성을 가집니다.

Application

관계도

frame_tree_application

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

Script 예시 화면

frame_tree_script_application

application에서 form의 script 접근

// 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"
this.mainframe.frame.form.name == "frm0"

form에서 application의 script 접근

// frm0에서 application으로 접근 (ChildFrame인 경우)
this.parent.name == "chdframe0"
this.parent.parent.name == "mframe0"
this.getOwnerFrame().getOwnerFrame().name == "mframe0"
this.getOwnerFrame().getOwnerFrame().parent.mainframe.name == "mframe0"