Habréã«é¢ããç§ã®ä»¥åã®åºçç©ã¯ãã®ç®æšãéæããŸãã-å€ãã®äººã
ãW3Viewã®ååšã«ã€ããŠåŠã³ãäœäººãã¯GitHubã蚪ããŸããã
åæã«ã次ã®ã³ã¡ã³ãã¯ããã®ã©ã€ãã©ãªã解決ããåé¡ããããã©ã®ããã«ããããŠãªãããªãããããå¿
èŠãšãããããããªãã®ãã«ã€ããŠã®ããæç¢ºãªèª¬æã®å¿
èŠæ§ãæããã«ããŸããã
äœããã®çç±ã§ãçã¿ãåãæ°ãããŸããçµéšããããšãªããWebãã¯ãããžãŒã§éçºãããUIãæ§ç¯ããæ¹æ³ãåŠã¶ããšã«èå³ããªãå Žåããã®èšäºã¯éå±ã«æããŸããæ®ãã¯ç«ã«ãå§ãããŸãã
ãã¿ãŒã³ãäŒçµ±ãããã³ããã¿ãŒã³ã
1ã€ã®å°ããªinnerHTMLã«ãã£ãŠç¢ºç«ãããäŒçµ±ã«ãããšãWebã®UIã¯ããŸããŸãªãã³ãã¬ãŒããšã³ãžã³ã䜿çšããŠæ§ç¯ãããŠããŸããé廿°å¹Žéããã³ãã¬ãŒããšã³ãžã³ã¯å€§ãã鲿©ããäžå¯èœã«çºå±ããŸããã ã€ã³ã¿ãŒãã§ãŒã¹ã®äœæãåçŽåããå¿
èŠããããŸããããã¿ã¹ã¯ã¯ããã容æã«ããŸããã§ããã è€éãªåé¡ã解決ããããã«ããã³ãã¬ãŒããšã³ãžã³ã®éçºè
ã¯å€ãã®æ°ããæŠå¿µãå°å
¥ããããŸããŸãªæŠå¿µãèæ¡ããã³ã¹ã¿ããã€ãªãããŸãã ã ããã€ãã®æŠå¿µã¯ãã¢ãã«ãæ§ç¯ããããã®ã«ãŒã«ãèŠå®ããŸãããããã¯ç§ã®æèŠã§ã¯åžžèã«å®å
šã«åããŠããŸãã ã³ã³ã»ããçšã®ã¢ããªã±ãŒã·ã§ã³ãäœæããŠããŸããã åæã«ããã³ãã¬ãŒããšã³ãžã³ã¯ãDOM APIã䜿çšããå¿
èŠæ§ã誰ãããè§£æŸããããã§ã¯ãããŸãããããã¹ãŠãäºæž¬ããããšã¯äžå¯èœã§ãã ãã ããDOMãžã®çŽæ¥çãªåœ±é¿ã¯ãæãçŸããæŠå¿µã§ãããç°¡åã«ç Žãããšãã§ããŸã...
ãã³ãã¬ãŒããšã³ãžã³ã®éçºè
ã¯ãæŠå¿µã®ç Žå£ãé²ãããã«ããã®ãããªå«æªæãšæªããã㌠ãã€ãŸãç§ãã¡ã®æèŠã§ã¯ã¢ã³ããã¿ãŒã³ã宣èšããŸããã
éçºè
ããã³ãã¬ãŒãã«é©åããªãå Žåãéçºè
ã¯äœãããªããã°ãªããŸãããïŒ -ã²ãšã€ã®ããšãæ®ã£ãŠãã- ä»£æ¿ææ®µãæ¢ãããšã
ãã¿ãŒã³ã®ä»£æ¿
ãããããããHTMLãJavascriptãããã³DOM APIã«ããããã³ãã¬ãŒããšãã©ãã¯ããžãã¯ã䜿çšããå¿
èŠããªããªããŸããã HTMLã¯ãDOM APIã䜿çšããŠãã©ãŒã ã®æ§é ã§ããJavascriptãèšè¿°ãããã®ãã©ãŒã ãå¶åŸ¡ãããã®ã€ãã³ããåŠçããŸãããçŸãããã·ã³ãã«ã§äŸ¿å©ã§ããã ããããã€ã³ã¿ãŒãã§ãŒã¹ã¯ããè€éã§åçã«ãªãã€ã€ãããHTMLã¯åŒãç¶ãããŒã¿èšè¿°èšèªã§ãã åè§£ã¯ãå€§èŠæš¡ã§è€éãªåœ¢ç¶ãå°ããªç¬ç«ããåå©çšå¯èœãªã«ãã»ã«ã«åè§£ããã³ã³ããŒãã³ãã§ããå¯èœæ§ããããŸãã
ã³ã³ããŒãã³ã宣èšã¯ãããŒã¿ã®å€æŽã«å¯Ÿããåå¿ã説æããã€ãã³ããã³ãã©ãå®çŸ©ããã¹ã¯ãªãããåããå°ããªHTMLããŒãžã®ããã«èŠããå ŽåããããŸãã æ¬¡ã«ããããã®ã³ã³ããŒãã³ããããããè€éãªã³ã³ããŒãã³ããçµã¿ç«ãŠãããšãã§ããŸãã
- ã©ãã§å
¥æã§ããŸããïŒ -å·¥å Žããã
- 圌ãã¯ã©ããã£ãŠããã«çãã®ã§ããïŒ -ããªãèªèº«ããããã説æããããã«é
眮ããŸãã
- ããããã©ã®ããã«èª¬æããŸããïŒ -éåžž-HTMLãJavascriptãããã³DOM APIã
- ãã®ãããªå·¥å Žã¯ã©ãã§å
¥æã§ããŸããïŒ -npm install w3view ã
W3Viewã¯ãåçŽãªã³ã³ããŒãã³ããšè€éãªã³ã³ããŒãã³ããäœæããããã®ãã¡ã¯ããªã§ã
å°ããªã¢ããªã±ãŒã·ã§ã³ã®äŸã䜿çšããŠããããã©ã®ããã«æ©èœããã©ã®ããã«äœ¿çšãããã説æããããšããŸãã W3Viewâ¢TodoMVCã«åºã¥ããŠãã©ã®äŸãæ€èšããã®ããããã«ã€ããŠé·ãéèããŠããŸãã ã å®äºããåäœããå®èšŒããããã«è¡ãããŸãããæ¯èŒãããã®ã¯äœããããŸããã
仿§ãã¬ã€ã¢ãŠãããã®ä»ã®åä¿¡ãã¬ã€ã«ã€ããŠã¯ã ãã¡ããã芧ãã ãã ã ããã«èªãåã«ã仿§ãšã¬ã€ã¢ãŠããäžèŠãã䟡å€ãããã§ãããã
W3Viewã¢ããªã®ä»çµã¿â¢TodoMVC
ã¢ãã«ãšã³ã³ãããŒã©ãŒã®èª¬æã¯çç¥ããŸããããããã¯ç®ç«ããªããã®ã§ãã ã¢ã¯ãã£ããªã¢ãã«ãå
éšããžãã¯ãå®è£
ããè¡šç€ºæ¹æ³ã«ã€ããŠäœãä»®å®ãããViewã¯å®å
šã«W3Viewã«åºã¥ããŠãããControllerã¯ãã¹ãŠãæçµã¢ããªã±ãŒã·ã§ã³ã«ãã€ã³ããããå€å
žçãªMVCãã©ã€ã¢ãã䜿çšãããšããèšããŸããã ã¢ããªã±ãŒã·ã§ã³ã¯ã倿Žããã«TodoMVCã¬ã€ã¢ãŠããå®è£
ãããã®ã¹ã¿ã€ã«ã远å ããŸããã
ç°¡åã«ããããã«ãã³ã³ããŒãã³ãã®èª¬æã¯ãããŒãžã®ããäžã®é衚瀺ã®DIVã«é
眮ãããŸãã
ã¢ããªã±ãŒã·ã§ã³ã®æ¥ç¶ãåæåãèµ·å
ã¢ããªã±ãŒã·ã§ã³ã¯ã4ã€ã®SCRIPTã¿ã°ã䜿çšããŠããŒãžã«æ¥ç¶ããŸãã
<script src="node_modules/w3view/w3view.js"></script> <script src="js/models/todo.js"></script> <script src="js/controllers/todo.js"></script> <script src="js/app.js"></script>
1ã€ç®ã¯W3Viewã©ã€ãã©ãªãŒã2ã€ç®ãš3ã€ç®ã¯ã¢ãã«ãšã³ã³ãããŒã©ãŒã4ã€ç®ã¯èµ·åã¹ã¯ãªããããã®äžã®äž»ãªãã®ïŒW3Viewã®äœæ¥ã«é¢é£ãããã®ããïŒã¯æ¬¡ã®ãšããã§ãã
var appContext = new todoController(todoModel('todos-W3View')); var w3view = new W3View(appContext); var sources = document.getElementById('components'); w3view.register(sources.children); document.body.removeChild(sources); w3view.create('application').mount(document.body, 0);
- ã³ã³ãããŒã©ãŒãšã¢ãã«ãåæåããŸãã
- W3Viewã®ã€ã³ã¹ã¿ã³ã¹ãäœæããã³ã³ãããŒã©ãŒã§åæåããŸããäœã§ãåæåã§ããŸãã
- ã³ã³ããŒãã³ãã®èª¬æãåããŸãããããã¯DIVïŒã³ã³ããŒãã³ãã«é
眮ãããŸãã
- W3Viewãã¡ã¯ããªã«ã³ã³ããŒãã³ããç»é²ããŸãã
- DOMããªãŒããã³ã³ããŒãã³ãã®èª¬æãåé€ããŸã-ããªãã¯ãããæ®ãããšãã§ããŸããããªãããã«ããã®ã§ããïŒ -å·¥å Žã«å
¥ã£ãåŸã圌ãã¯ãã¯ãå¿
èŠãããŸããã
- APPLICATIONã®ã«ãŒãã³ã³ããŒãã³ãã®ã€ã³ã¹ã¿ã³ã¹ãäœæããæåã®èŠçŽ ã§ããŒãžã«ããŠã³ãããŸãã
- åºæ¥äžãããã¢ããªã±ãŒã·ã§ã³ã¯å®è¡äžã§ãïŒ
éåžžãç§ã¯ããå°ãªãè¡ã§ããŸããããŸãããããã§ã¯çŸããã®ããã«DOMããªãŒããããã«ããããšã«ããŸãããäœããã¹ããã¯å®ç§äž»çŸ©ã§ãã äºåã«æºåããããã³ãã«ã䜿çšããå Žåããããã®6è¡ã¯2è¡ã«ãªããŸãã
var appContext = new todoController(todoModel('todos-W3View')); w3view(appContext).create('application').mount(document.body, 0);
ãã¡ããããã³ãã«ã¯æ¬çªç°å¢ã§ã¯ã¯ããã«åªããŠããŸãããéçºããã³æç¢ºåã®ããã«ããœãŒã¹ãæ¥ç¶ããããšã奜ã¿ãŸãã
æ¥ç¶ãåæåãèµ·åããŸããããäœã§ããïŒ ã¯ã...ã³ã³ããŒãã³ããäœæããå¿
èŠããããŸããïŒ
ã³ã³ããŒãã³ããäœæãã
æ¢ã«è¿°ã¹ãããã«ãã³ã³ããŒãã³ã宣èšã¯HTMLèŠçŽ ã§ãããããæ¢åã®ã¬ã€ã¢ãŠããæçã«åå²ããããŒã¿ã®å€æŽãšã€ãã³ããã³ãã©ãŒãžã®åå¿ãèšè¿°ãããããå
ã«æ»ãã ãã§ååã§ãã
TodoMVCã§ã¯ãåçéšåãç°¡åã«åºå¥ã§ãã APPLICATIONã®ã«ãŒãã³ã³ããŒãã³ãã¯æ¬¡ã®ããã«ãªããŸããã
<section as="application" class="todoapp"> <header class="header"> <h1>todos</h1> <input ref="newTodo" class="new-todo" placeholder="What needs to be done?" autofocus> </header> <main ref="main"></main> <totals ref="totals"></totals> <script type="javascript"> </script> </section>
ã芧ã®ãšãããããã¯åãªãHTMLã§ãããããã€ãã®éæšæºå±æ§ã2ã€ã®éæšæºã¿ã°ãããã³ééã£ãSCRIPTã¿ã°ã¿ã€ãããããŸãã
- asããã³refã®éæšæºå±æ§ã宣èšãããŠããã³ã³ããŒãã³ãã®ååãããã³ãã®å
éšèŠçŽ ãåç
§ããã©ãã«ã ãããã®å±æ§ã¯æ¬¡ã®ããã«è§£éãããŸãã
<section as="application" ...>... SECTION APPLICATION, <input ref="newTodo" ...> INPUT, "this.ref.newTodo"
ã³ã³ããŒãã³ãã€ã³ã¹ã¿ã³ã¹èªäœã¯ã ãã®ããã«ç¬èªã®ã¹ã¯ãªããããã¢ã¯ã»ã¹ã§ããŸããããã¯ãã³ã³ããŒãã³ãã€ã³ã¹ã¿ã³ã¹ãåãªãDOMããŒãã§ããæ¹æ³ã§ãã
function (appContext, factory){
- appContextã¯ãW3Viewãã¡ã¯ããªãåæåããã®ãšåãappContextã§ãã
- factoryã¯ãã³ã³ããŒãã³ãã€ã³ã¹ã¿ã³ã¹ãäœæãããã¡ã¯ããªã®ã€ã³ã¹ã¿ã³ã¹ã§ãã
SCRIPTã¿ã°ã®ã³ã³ãã³ããšã³ã³ããŒãã³ãã€ã³ã¹ã¿ã³ã¹ã®ã©ã€ããµã€ã¯ã«
ã ããã¹ã¯ãªããã Controllerã«éä¿¡ã«ã€ããŠäŒããå¿
èŠããããŸããã¢ããªã±ãŒã·ã§ã³ãããŒãžã«é
眮ãããšãã«ãããè¡ããŸãããã®ãããã¹ã¯ãªããã§onMountãã³ãã©ãŒãå®çŸ©ããŸãã
this.onMount = function (){ appContext.setView(this); console.log("application section created"); }
ãã®ãã³ãã©ãŒã¯ãã³ã³ããŒãã³ããDOMããªãŒã«æ¿å
¥ïŒããŠã³ãïŒãããçŽåŸã«åŒã³åºãããŸãã ã³ã³ããŒãã³ããã¢ã³ããŠã³ããããçŽåã«åŒã³åºãããããã¢ã®onUnmountãå®çŸ©ã§ããŸãã ããããæ©èœããããã«ã¯ãã³ã³ããŒãã³ãã®ç¹å¥ãªã¡ãœãã-mountïŒtargetElementãindexïŒããã³unmountïŒïŒã䜿çšããŠããŠã³ãããã³éã¢ã»ã³ãã«ããå¿
èŠããããŸãã ã³ã³ããŒãã³ããDOMããåé€ãããå Žåãå¿
èŠã«å¿ããŠå床ããŠã³ãã§ããŸãã ãŸããã³ã³ããŒãã³ããäœæããã³ç Žæ£ãããšãã«åŒã³åºãããonCreateããã³onDestroyããããŸãïŒ destroyã¡ãœããã䜿çšããŠã³ã³ããŒãã³ããç Žæ£ããå¿
èŠããããŸãïŒã ã³ã³ããŒãã³ãã€ã³ã¹ã¿ã³ã¹ã§destroyãåŒã³åºããããšãæåã«ã¢ã³ããŠã³ãããïŒunmountïŒïŒïŒã次ã«ãµãããªãŒå
šäœããŽãç®±ã«ååž°çã«ç Žæ£ãããŸãã destroyãåŒã³åºããåŸãã¢ã€ãã ã¯äœ¿çšã§ããªããªããŸãã
ä»ã®ãªããžã§ã¯ãã«ã³ã³ããŒãã³ãåç
§ãé
眮ããå¿
èŠãããå Žåã¯ã onCreateãã³ãã©ãšonMountãã³ãã©ãå®çŸ©ããå¿
èŠããããŸãã ãããã®ãªã³ã¯ãåé€ããã³ãŒãã¯onDestroyãã³ãã©ãŒãšonUnmountãã³ãã©ãŒã«é
眮ããå¿
èŠããããŸã ãããã¯å¯Ÿç§°çã«è¡ãããšãæãŸããã§ãã
æãæŽãã ãã§ãã¡ã¢ãªãæŒããããšã¯ãããŸããã
SCRIPTã¿ã°ã®å
容ãããŒã¿ã®æŽæ°
ãã®ãããã©ã€ããµã€ã¯ã«ãææ¡ããŸãããæ¬¡ã«ãããŒã¿ã®å€æŽã«å¯ŸåŠããŸãã
<section as="application" class="todoapp"> <header class="header"> <h1>todos</h1> <input ref="newTodo" class="new-todo" placeholder="What needs to be done?" autofocus> </header> <main ref="main"></main> <totals ref="totals"></totals> <script type="javascript"> this.onSetData = function (input){ this.ref.main.setData(input); this.ref.totals.setData(input.total); }; this.onMount = function (){...}; </script> </section>
ããã§ã¯ãã¹ãŠãç°¡åã§ããæ°ããããŒã¿ãåä¿¡ãããšããããããµãããªãŒã®èŠçŽ ã«é
åžããŸãã å€éšããïŒããã§ã¯ã³ã³ãããŒã©ãŒããïŒããŒã¿ã¯setDataã¡ãœããã䜿çšããŠèšå®ãããW3Viewã³ã³ããŒãã³ãã®äœæããããã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹ã«æ¢ã«ååšããåã«æ±ºå®ããå¿
èŠãããonSetDataãã³ãã©ãŒãåŒã³åºããŸãã setDataã¡ãœãããšonSetDataãã³ãã©ãŒã¯ãæå€§3ã€ã®åŒæ°ãåãããšãã§ããŸãã
- ããŒã¿ -ã¬ã³ããªã³ã°ã®ããã®å®éã®ããŒã¿-äž»ãªåŒæ°ãéåžžã¯ããã ãã§ååã§ãããæã«ã¯ä»ã®ãã®ã圹ç«ã€å ŽåããããŸãã
- opts-å°é£ãªå Žåãããšãã°ãªã¹ããæäœããå Žåããªã¹ãã®ãã¹ãŠã®èŠçŽ ã«å
±éãã远å ã®ã³ã³ããã¹ããäŒããå¿
èŠããããŸãã
- additional-远å 屿§ããªã¹ãã®å Žåããªã¹ãå
ã®ã¢ã€ãã çªå·ãããã«è¡šç€ºãããå ŽåããããŸãã
ãŸããä»ã®åé¡ã§ã¯ã3ã€ã®åŒæ°ãã¹ãŠãèªç±ã«é©çšããå¿
èŠãªãã¹ãŠãæž¡ãããšãã§ããŸããããã¯ã解決ãããã¿ã¹ã¯ãšonSetData ãã³ãã©ãŒã®å®è£
ã®ã¿ã«äŸåããŸãã
this.ref.mainããã³this.ref.totalsã¯ãã³ã³ããŒãã³ãã®ãµãããªãŒå
ã®èŠçŽ ãžã®ãªã³ã¯ã§ããã屿§ref - ref = "main"ããã³ref = "totals"ã§ããããããŒã¯ãããŠããŸãã
SCRIPTã¿ã°ã®å
容-ã€ãã³ããåŠçããæ¹æ³
APPLICATIONã³ã³ããŒãã³ãã«ã¯ãã1ã€ã®èŠçŽ ãããã ref = "newTodo"ãšããã©ãã«ãä»ããããŠããŸã-ããã¯å
¥åãã£ãŒã«ãã§ãã 仿§ã«ããã°ãäœã§ãå
¥åã§ããŸãããENTERããŒãæŒããšãããããã°ã®ãªã¹ãã«ãããããã¯ãã§ãã åœç¶ããããå®çŸããã«ã¯ãEnterããŒãæŒãå¿
èŠããããŸãã
W3Viewã®ã€ãã³ãã¯ãéåžžã«æšæºçãªæ¹æ³ã§åŠçãããŸã-éåžžã®èŠçŽ ã«éåžžã«æšæºçãªã€ãã³ããã³ãã©ãŒãããã¯ããããšã«ãã£ãŠã ãã®å Žåã屿§ref = "newTodo"ãèšå®ããèŠçŽ ã®onkeydown ã
<section as="application" class="todoapp"> <header class="header"> <h1>todos</h1> <input ref="newTodo" class="new-todo" placeholder="What needs to be done?" autofocus> </header> <main ref="main"></main> <totals ref="totals"></totals> <script type="javascript"> this.ref.newTodo.onkeydown = function (e){ var ENTER_KEY = 13; if(e.which !== ENTER_KEY) return; appContext.addNewTodo(this.value); this.value=''; }; this.onSetData = function (input){...}; this.onMount = function (){...}; </script> </section>
ãã¹ãŠãéåžžã«æ®éã§ãïŒèŠçŽ ãåããã€ãã³ãããã³ã°ãããENTERããŒãæŒãããå Žåãã³ã³ãããŒã©ãŒã®ã¡ãœãããåŒã³åºããŸãïŒããã®ã³ã³ãããŒã©ãŒã¯appContextãšåŒã°ããŸã- æ°ããW3Viewã«æž¡ããŸãã -ããã§ãïŒã
ã¢ããªã±ãŒã·ã§ã³ã®ã«ãŒãã³ã³ããŒãã³ãã¯çµäºããŸãããæ¬¡ã®ã³ã³ããŒãã³ãã«ç§»ããŸãããã TOTALSã³ã³ããŒãã³ãã¯ç°¡åãªã®ã§ã次ã®ãã®ã¯MAINã«ãªââããŸããããã«ã€ããŠã¯äœãæžããŸããã DOMèŠçŽ ãžã®å±æ§ããã³ããããã£ã®èšå®ãšãŸã£ããåãã§ãæ°ãããã®ã¯ãããŸããã ãã ããã³ã³ããŒãã³ãMAINã¯ãã詳现ã«åæ¢ããå¿
èŠããããŸãã
çµã¿èŸŒã¿ã®ARRAY-ITERATORã³ã³ããŒãã³ã
MAINã§æãè峿·±ãã®ã¯ãçµã¿èŸŒã¿ã®ARRAY-ITERATORã®äœ¿çšã§ãã
... <array-iterator ref="list" usetag="ul" class="todo-list"> <listItem></listItem> </array-iterator> ...
ARRAY-ITERATORã¯W3Viewã®ãã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹ã«æ¢ã«ååšãããã®ã³ã³ããŒãã³ãã¯é
åã衚瀺ããããã«äœ¿çšãããŸãã èŠçŽ ã衚瀺ããã³ã³ããŒãã³ãã«ãã£ãŠæ§æãããŸãã setDataã§ã¯ã ARRAY-ITERATORã¯2ã€ã®åŒæ°ãåããŸãã
- ããŒã¿ - ããŒã¿é
å
- optsã¯ãé
åã®ãã¹ãŠã®èŠçŽ ã«å
±éãããã®ã§ãã
é
åèŠçŽ ã衚瀺ããã³ã³ããŒãã³ãã¯ã3ã€ã®åŒæ°ãåãåããŸãã
- item-é
åã®èŠçŽ
- opts -ARRAY-ITERATORã«è»¢éãããã¹ãŠã«å
±éãããã®ã
- index-é
åå
ã®èŠçŽ ã®ã€ã³ããã¯ã¹ã
é
åèŠçŽ ã衚瀺ããããã«è€æ°ã®ã³ã³ããŒãã³ããæå®ãããšããã®ã€ã³ã¹ã¿ã³ã¹ã亀äºã«ãªããŸããããšãã°ã
... <array-iterator ref="list" usetag="ul" class="todo-list"> <listItem class="even"></listItem> <listItem class="odd"></listItem> </array-iterator> ...
ãã®å Žåããã¹ãŠã®å¥æ°èŠçŽ ã«ã¯ã¯ã©ã¹ãevenããããããã¹ãŠã®å¶æ°èŠçŽ ã«ã¯ã¯ã©ã¹ãoddãããããŸãã
ARRAY-ITERATORã¯DIVã«åºã¥ããŠããŸãããããã§ã¯ULãå¿
èŠãªã®ã§ã usetag = "ul"屿§ã§å€æŽããŸãã W3Viewã®ãã¹ãŠã®km3ã³ã³ããŒãã³ãã¯ããã®ãããªå±æ§ãåãåãã宣èšã«åºã¥ããŠã¿ã°ã眮ãæããããšãã§ããŸãã
ã³ã³ããŒãã³ãã宣èšãããšãã«TABLEã³ã³ããã¹ãã®å€éšã§TBODYãTRããŸãã¯TDã¿ã°ã䜿çšããå¿
èŠãããå Žåã¯ãW3Viewã³ã³ããŒãã³ã以å€ã®ã¢ã€ãã ã«tagname屿§ã䜿çšã§ããŸãã
ããŠãããã§ã³ã³ããŒãã³ããäœæããæ¹æ³ããã¡ã¯ããªã«ã³ã³ããŒãã³ããç»é²ããæ¹æ³ãããã³ã³ã³ããŒãã³ããé©çšããæ¹æ³ãçè§£ã§ããŸããã ã³ã³ããŒãã³ããæã«æã€æ¹æ³ã«ã€ããŠè©±ãã ãã§ãã
ã³ã³ããŒãã³ãã©ã€ãã©ãª-ã¢ãžã¥ãŒã«
TodoMVCã¯éåžžã«å°ããã·ã³ãã«ãªã¢ããªã±ãŒã·ã§ã³ã§ã-ãã®ã€ã³ã¿ãŒãã§ãŒã¹ãèšè¿°ããããã«å¿
èŠãªã³ã³ããŒãã³ãã¯4ã€ã ãã§ãã£ããããããŒãžå
ã§ãã®ãã¹ãŠãèšè¿°ããããšãã§ããŸããã å®éã«ã¯ãå€ãã®ã³ã³ããŒãã³ããå¿
èŠã«ãªãå ŽåããããŸãã ç»é¢ãããã«ãã¯ãããŒã«ãã¿ãŒããããã¢ããããã®ä»ãã¹ãŠã®ããšã¯èšããŸã§ããªãã倿°ã®ãã¿ã³ãå
¥åããã®ä»ã®ã¹ã©ã€ããŒãçºçããŸãããããUIã倧奜ããªçç±ã§ãã
ãã¡ããããã®ãã¹ãŠãããŒãžã«èšè¿°ããã®ã¯äŸ¿å©ã§ã¯ãããŸãããå¥ã®ãã¡ã€ã«ã§éžæããå¿
èŠããããŸãããããã¯åãªããã¡ã€ã«ã§ã¯ãªããã³ã³ããŒãã³ãã©ã€ãã©ãªãæã€ã¢ãžã¥ãŒã«ã§ããããšãæãŸããã§ãã W3Viewã䜿çšãããšãã¢ãžã¥ãŒã«ãããŒããããããã®éã®äŸåé¢ä¿ããã®å Žã§è§£æ±ºã§ããŸãã ãããè¡ãã«ã¯ã moduleLoaderã䜿çšããæ¬¡ã®ããã«äœ¿çšããŸãã
<script src="../w3view.js"></script> <script src="moduleLoader.js"></script> <script src="httpreader.js"></script> <script> var appContext = {}; moduleLoader(appContext, '../examples/modules/window.w3v.html', reader, function(factory){ factory.create('app').mount(document.body); }); </script>
ããã¯ã w3viewããã±ãŒãžã®loaderãã©ã«ããŒããã®äŸã§ãã
moduleLoaderã¯4ã€ã®åŒæ°ãåããŸãã
- appContext-ã¢ããªã±ãŒã·ã§ã³ã³ã³ããã¹ãã
- path-ã«ãŒãã¢ãžã¥ãŒã«ãžã®ãã¹ã
- ãªãŒã㌠-HTTPãªãŒããŒïŒXHRïŒããã³
- ã³ãŒã«ãã㯠-ãã¹ãŠãããŒãããããšãã«ã¢ããªã±ãŒã·ã§ã³ãèµ·åãã颿°ã çµæãšããŠã³ã³ããŒãã³ãã§æºããããW3Viewã€ã³ã¹ã¿ã³ã¹ãåŒæ°ãšããŠåãåããŸãã
äŸåé¢ä¿ã¯IMPORTã¿ã°ã䜿çšããŠæ¥ç¶ãããŸããå¥ã®ã©ã€ãã©ãªã«å¥ã®ã©ã€ãã©ãªãæ¥ç¶ããå¿
èŠãããå Žåã¯ããã®ã©ã€ãã©ãªã«æ¬¡ã®ããã«èšè¿°ããå¿
èŠããããŸãã
<import src="./realative/path/to/module" as="namespace" type="html"></import> <div as="my-component"> ......
as屿§ã§æå®ãããååã¯ã次ã®ãããªåå空éãšããŠããã«äœ¿çšã§ããŸãã
<import src="./realative/path/to/module" as="namespace" type="html"></import> <div as="my-component"> <namespace:another-component> </namespace:another-component> </div>
ãããã£ãŠããã©ã°ã€ã³ã©ã€ãã©ãªã®ãã¹ãŠã®ã³ã³ããŒãã³ãã䜿çšå¯èœã«ãªããŸãã 1ã€ã®ã¢ãžã¥ãŒã«ãäœåºŠã€ã³ããŒãããŠããã¢ãžã¥ãŒã«ã¯1åã ãèªã¿èŸŒãŸããååž°çãªäŸåé¢ä¿ãèš±å¯ãããŸãã
ããŒãæéãççž®ããã³ã³ããŒãã³ãã®HTMLèšè¿°ãè§£æããã«ã¯ããã«ããŒã䜿çšã§ããŸãã w3viewããã±ãŒãžã®builderãã©ã«ããŒã«ããã build.jsãã¡ã€ã«ã«äœ¿ç𿹿³ãèšèŒãããŠããŸãã ã¢ã»ã³ããªã®çµæã¯ãã€ã³ããŒãããããã¹ãŠã®ã©ã€ãã©ãªãå«ãåäžã®jsãã¡ã€ã«ã§ãã
æåŸã«ãèªãã§ãããŠããããšã
W3Viewã«ã€ããŠç¥ãå¿
èŠãããã®ã¯ããã ãã§ãã ã©ã€ãã©ãªèªäœã¯ãã®èª¬æãããã¯ããã«å°ããããœãŒã¹ãèŠãã ãã§ãã®æ§é ãçè§£ããããšã¯é£ãããããŸãããã§ããã ãã·ã³ãã«ã§ééçã«ããããã«ããŸããã ã©ã€ãã©ãªã¯èŠåã課ããŠããªããããåé¡ã解決ããã®ã«é©ããæ¹æ³ã§ããã°ã©ã ã§ããŸãã
ããã°ã£ãŠã