이 장에서는 Form들의 상호관계를 좀 더 구체적으로 도식화하여 설명합니다.
표기법
Frame의 상호관계를 도식화 할 때 사용하는 표기법을 설명합니다.
box
collection상의 Item으로 실제 이름을 의미하지는 않습니다 |
연결선
1:1 연결, 마름모 쪽이 Child가 됩니다. | |
1:N 연결, 원 쪽이 Child가 됩니다. |
설명
Item간의 Script문법은 연결선 위에 표기합니다.
Parents에서 Child로의 Script는 Prefix없이 표기합니다.
Child에서 Parents로의 Script는 "▲" Prefix를 사용합니다.
위 표기는 다음을 의미합니다.
parents와 child는 1:N의 관계입니다.
Script상에서 "parents.id"로 child에 접근할 수 있습니다.
Script상에서 parents.child[index]로 child에 접근할 수 있습니다.
Script상에서 child.parent로 parents에 접근할 수 있습니다.
용어정의
용어 | 설명 |
---|---|
element | component의 property, method, event를 통칭하여 component의 element라고 합니다. |
공통으로 사용하는 Syntax
배열표시 "[", "]"는 "(", ")"로 대체할 수 있습니다.
즉, this.all[0]은 this.all(0)과 동일합니다.
"[", "]"와 "(", ")"내에는 index 또는 "id"가 올 수 있습니다.
즉, this.all[0]과 this.all["btn0"] 둘 다 동일 component를 가리킬 수 있습니다.
Form
관계도
일반 Form인 경우
container component인 경우
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"
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"
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를 가질 수 없고 component만 가질 수 있다.
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"
form을 연결한 container component에 Script 접근
frm1에 있는 dtset1의 접근 (frm1안의 script인 경우)
this.name== "div1" // 이 값은 form을 연결한 container component의 id이므로 값이 가변적입니다. this.btn0.name== this.all["btn0"].name == "btn0"
frm1에 있는 dtset1의 접근 (frm0안의 script에서 접근할 경우)
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의 특성을 갖게 됩니다.
form script에서 this로 접근할 경우, 연결된 form 내부의 element뿐만 아니라 container component의 element에도 접근이 가능합니다.
container component가 속한 form에 this.component_name으로 접근할 경우, 연결된 form의 모든 elements에 접근이 가능합니다.
Single Frame 형식의 Application
관계도
form내의 component / bind / invisible object는 .getOwnerFrame()이나 .getOwnerForm()이 없습니다.
Script 예시 화면
single Frame 의 경우 MainFrame은 ChildFrame, TabFrame 중 한 개만 가질 수 있습니다.
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" 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의 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"
frm1 에서 mainframe으로 접근 (TabFrame인 경우)
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
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 형식의 Form
관계도
nested ChildFrame에서 Script 사용법
nested ChildFrame생성 및 삭제 방법
// ********** 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;
Script flow
modal/modaless ChildFrame에서 Script 사용법
modal / modaless ChildFrame생성방법
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);
Script flow