ããããã»ãã®å°ãã®çè«ããå§ããŸãããã
MVCãMVPãããã³MVVMã
ãããã®ã»ãšãã©ãæåã®2ã€ã®ãã³ãã¬ãŒãã«å€å°ãªãã¿ãããå ŽåãåŸè ã«ã€ããŠèããããšã®ãã人ã¯ã»ãšãã©ããŸããã
å šäœã®å€§éšãã¯äœã§ããïŒ MVCãWebã«æ ¹ä»ããã®ã¯ãäž»ã«ãªã¯ãšã¹ã/ã¬ã¹ãã³ã¹ã¹ã¯ãªããã«å®å šã«é©åããããã§ãã èŠæ±ãæ¥ãŠãé©åãªã³ã³ãããŒã©ãŒã«éä¿¡ãããã¢ãã«å ã®ããã€ãã®ããã»ã¹ãéå§ããŠããããã¥ãŒãäœæãããŸãã éåžžãããã¯ã¢ãã«ããã®ããŒã¿ãåã蟌ãŸãããã³ãã¬ãŒãã§ãã 次ã«ãåä¿¡ããããŒã¯ã¢ããããã©ãŠã¶ã§ã¯ã©ã€ã¢ã³ãã«éä¿¡ãããŸãã
ãã®ãããªã·ããªãªã®äž»ãªæ©èœã¯ããã¥ãŒã®æå¹æéãçãããšã§ãããã¥ãŒããšã«äœæããã1åã®ãã¹ã§ããŒã¿ãå ¥åãããã ãã§ã-ããã ãã§ãã
Ajaxãç»å ŽããåäžããŒãžã®ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããåŸãViewã®å¯¿åœãé·ãããšãå€æãããããåçŽãªãã³ãã¬ãŒãã¯äžèŠã§ããã ã©ã€ãã¿ã€ã ã®å»¶é·ãšã¯ãäžè¬ã«ã©ã€ããµã€ã¯ã«ãšåŒã°ãããã®ãè€éã«ããããšãæå³ããããããã¥ãŒå ã®ããžãã¯ã®å€èŠ³ãè€éã«ãªããŸãã
åœç¶ã誰ããããæãã§ãããã誰ããæãã§ããŸãããããã£ãŠãã¢ããªã±ãŒã·ã§ã³ããžãã¯ã¯ããŒã¯ã¢ããã§ã¯ãªãã³ãŒãã«è¡šç€ºãããŸãã ããã«ãããä¿å®ããã¹ããããã³å€æŽã容æã«ãªããŸãã ãã®ãããªå Žåã圌ãã¯äœãããŸããïŒ
ã¢ã€ãã¢1ïŒ MVPãå ¥åããŸãã ãã¬ãŒã³ããŒã·ã§ã³ããžãã¯ã¯ç¹å¥ãªã¬ã€ã€ãŒã«é 眮ããããã¬ãŒã³ã¿ãŒã®ã³ã³ãããŒã©ãŒãšçµåãããŸãã ãã¬ãŒã³ã¿ãŒã®ã¿ã¹ã¯ã¯ãã¢ãã«ããã¬ãŒã³ããŒã·ã§ã³ããåé¢ããã¢ãã«éã®ããŒã¿è»¢éãæ åœãããã¬ãŒã³ããŒã·ã§ã³ãå€æŽããããžãã¯ãå«ããããšã§ãã
ãã¬ãŒã³ã¿ãŒã¯ä»²ä»è ã§ãã çè«çã«ã¯ãã¹ããŒããã«ãŸãã¯ã¹ããŒãã¬ã¹ã§ãã ãã ããå®éã«ã¯åžžã«ç¶æ ãååšããŸããããã¯çš®ã®ç¶æ ã§ãã 代æ¿æ¡ã¯ã¢ãã«ã«å«ããããšã§ãããããã¯ãã¡ãã誰ãæãã§ããŸããã ãããã£ãŠããã¬ãŒã³ã¿ãŒã«ç¶æ ããããšä»®å®ããŸãã
Webã«é¢é£ããŠMVPãèŠããšãPresenterã¯ç¶æ ãã£ãŒã«ããæã€JavaScriptã®ãªããžã§ã¯ãã§ããå¯èœæ§ããããŸãã HTMLãšãŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ã«ãã£ãŠã©ã®ããã«å€åããŸããïŒ -DOMã€ãã³ããéããŠã ã€ãŸã ãã¬ãŒã³ã¿ãŒã¯ããã¥ãŒãšéä¿¡ããããã®ãã£ãŒã«ããšã€ãã³ããªã¹ããŒãæã€ãªããžã§ã¯ãã§ãã
ã¢ã€ãã¢2ïŒã€ãã³ãã䜿çšããŠããã¬ãŒã³ã¿ãŒãã¢ãã«ã«æ¥ç¶ããããšãã§ããŸãã ã€ãŸã ãã¬ãŒã³ã¿ãŒã®ãã£ãŒã«ãã§å€æŽãçºçãããšã察å¿ããã€ãã³ããããªã¬ãŒãããŸãã ã€ãã³ããã³ãã©ãŒã¯ã¢ãã«å ã®ããžãã¹ã¡ãœãããåŒã³åºãããã®çµæã¯çºè¡šè ã®ä»ã®ãã£ãŒã«ãã®å€ã®å€åã®åœ¢ã«ãåæ ãããŸãã ã€ãã³ããåã³çºçããŸãããä»åã¯ãããšãã°ãã¥ãŒãã³ãã©ã§ããå ŽåããããŸãã ãã®åŸãã¢ãã«ã®å€æŽããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã«åæ ãããŸãã ãã®ãããªã€ãã³ãé§ååã®ã¯ãŒã¯ãããŒã次ã«ç€ºããŸãã
ã¢ã€ãã¢3ïŒã¡ãã»ãŒãžåŠçã€ã³ãã©ã¹ãã©ã¯ãã£ããã¬ãŒã³ã¿ãŒããåé€ãããå¥ã®ãã¬ãŒã ã¯ãŒã¯ã«é ããŠããå Žåããã¬ãŒã³ã¿ãŒãªããžã§ã¯ãèªäœã¯ãã£ãŒã«ããæã€åçŽãªãªããžã§ã¯ãã«å€ãããŸãã ãã£ãŒã«ãã®å€ãå€æŽããããšã«ãããã¢ãã«ãŸãã¯ãã¥ãŒã§ããã€ãã®ããã»ã¹ãéå§ããŸãã ãã®ãããªåçŽãªãªããžã§ã¯ãã¯ãViewModelãšåŒã°ããŸããããžãã¹ããžãã¯ã®èŠ³ç¹ããã詳现ã説æããããšãªããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãã¢ãã«åããŸãã
.netã§ã¯ãUIã³ã³ããŒãã³ãã®ã¬ã€ã¢ãŠãã«XAMLã䜿çšãå§ããããããã¿ãŒã³ãæ ¹ä»ããŠããŸããããã¯ãViewModelãã£ãŒã«ããžã®èŠçŽ ã®ãã€ã³ãã£ã³ã°ã宣èšçã«èšè¿°ããããšãã§ããããŒã¯ã¢ããã§ãã äžæ¹ãã€ãã³ãã¯ãã¬ãŒã ã¯ãŒã¯ã¬ãã«ã§ãµããŒããããŠãããããViewModelããã³Modelãã€ã³ãã£ã³ã°ã®å®è£ ãéåžžã«äŸ¿å©ã§ãã
JavaScriptã§ã¯ããã®ãããªã€ãã³ãã¯ãµããŒããããŠããªããããMVVMãã³ãã¬ãŒããå®è£ ããã«ã¯2ã€ã®ããšãå¿ èŠã§ãã
- DOMèŠçŽ ã®ããããã£ãViewModelãã£ãŒã«ãã«ãã€ã³ãããã¡ã«ããºã ã
- ViewModelãã£ãŒã«ãã®å€ã®å€æŽã«é¢é£ããã€ãã³ãããµããŒãããããã®PubSubã€ã³ãã©ã¹ãã©ã¯ãã£ã
ããã¯ã¢ãŠãjs
Knockout JSã¯ãããã2ã€ã®ã¡ã«ããºã ãå®è£ ãããã¬ãŒã ã¯ãŒã¯ã§ãã éä¿¡ã«ã¯ãView-ViewModel HTML5ããŒã¿å±æ§ã䜿çšãããŸãã
äŸïŒ
< div id =â customerDetails â data-bind =â visible: currentCustomer () !== null â >
* This source code was highlighted with Source Code Highlighter .
currentCustomer-ViewModelã®ãã£ãŒã«ãã ããã¯å®éã«ã¯ãã£ãŒã«ãã§ã¯ãããŸããã
var vewModel = {
currentCustomer: ko.observable(defaultCustomer),
âŠ
}
* This source code was highlighted with Source Code Highlighter .
ã芧ã®ãšããããã£ãŒã«ãã®å€ã¯ko.observableã«ã©ãããããŠããŸãã ãã®ã©ãããŒãä»ããŠãKnockoutã¯ãã£ãŒã«ãå€ã®å€åãç£èŠããŸãã ã€ãŸã 察å¿ããã€ãã³ããã³ãã©ãããã§åŒã³åºãããŸãã æ¬ ç¹ã¯ããã¡ãããã¡ãœããåŒã³åºããéããŠã©ãã§ãäœæ¥ããªããã°ãªããªãããšã§ããæ¬åŒ§ãæžããŸãã
viewModel.currentCustomer = joeCoder;
* This source code was highlighted with Source Code Highlighter .
ã«ãªããŸã
viewModel.currentCustomer(joeCoder);
* This source code was highlighted with Source Code Highlighter .
ããªãã¯ããã«æ £ããããšãã§ããŸãããæã ãã²ãã¿ãŒã®æ¬åŒ§ã¯å¿ããããŸãã
賌èªããã«ã¯ã以äžãæžãå¿ èŠããããŸãã
viewModel.currentCustomer.subscribe( function (newValue) {
// this === context <br>
}, context);
* This source code was highlighted with Source Code Highlighter .
ãããã£ãŠãViewModelãããžãã¹ã¡ãœããã«ãã€ã³ãã§ããŸãã ãã¹ãŠã®ããŒã¿ãã€ã³ãå±æ§ã®ãã¬ãŒã ã¯ãŒã¯å ã§ãåããã³ãã©ãŒãå®éã«äœæãããŸãã ãã¹ãŠã®ãã€ã³ãã£ã³ã°ã¯åŒã³åºãã«ãã£ãŠããªã¬ãŒãããŸã
ko.applyBindings(viewModel)
* This source code was highlighted with Source Code Highlighter .
ãã®ãããè¡šé¢çã«ã¯ãã¹ãŠã«ã¢ã¯ã»ã¹ã§ããŸã-éæ³ã¯ãããŸããã
ãã¡ãããåé¡ãããã ãã«éå®ãããŠããã°ãããã¯ãã§ã«ããªãçãã§ãããã ãããããµã³ããŒãœã³ããããã¯ç¶ããã
ãŸããé åãã©ããããŸããïŒko.observableArrayã 確ãã«ã圌ã¯å°ãç¥ã£ãŠããŸãïŒããããããã·ã¥ããªããŒã¹ãã·ããããœãŒããã¹ãã©ã€ã¹ãã·ãã解é€ãã¹ã©ã€ã¹ãåé€ãåé€ãã¹ãŠãindexOfã ä»äºã«ã¯ååã§ãããã¢ã³ããŒã¹ã³ã¢ã®ããªã«ã ãã§ã¯ååã§ã¯ãããŸããã ãã¡ãããå€ïŒé åèªäœïŒãèªã¿åã£ãŠæäœãããã®å šäœãæžãæ»ãããšãã§ããŸãã ããããããã¯ãããšãå€æããŸãïŒãªããç§ã¯ããã«èª¬æããŸãïŒã ãããã£ãŠããã§ã«ãããã®ã«åºå·ããããšããå§ãããŸãã
2çªç®ã«éèŠãªè¿œå ã¯ko.dependentObservableïŒïŒã§ãã ã€ãŸã ViewModelã§ããããã£ãå®çŸ©ã§ããŸãããããã¯ä»ã®ããããã£ã«äŸåããŸãã åæã«ãããã¯ã¢ãŠãã¯äŸåé¢ä¿ãèªåçã«è¿œè·¡ããŸã ïŒ ããã¯ãã©ã€ãã©ãªã®æãéèŠãªæ©èœã®1ã€ã§ãã䜿çšããããšã匷ããå§ãããŸãã ç¹°ãè¿ããŸãããå éšã«ã¯éæ³ã¯ãããŸããã èšç®æã«ãkoã¯ã©ã®èŠ³æž¬å€ã«ã¢ã¯ã»ã¹ããŠããããç£èŠãããã©ãã«ãŒã«è¿œå ããŸãã ãããã®ããããã£ã®ããããã®å€ãå€æŽãããå ŽåãäŸåããããã£ã®åã«ãŠã³ããåŒã³åºãããŸãã äŸåããããã£ãåºåºããããã£ãšããŠãæ©èœããããšã¯æããã§ãã
dependentObservableã§äœãã§ããŸããïŒ ãã®äž»ãªç®çã¯ãããžãã¯ãç°¡çŽ åããããšã§ãã ããŒã¿ãã€ã³ããå°é£ãªç¶æ ã«ããããšããããããŸãã éåžžã«äžå¿«ã«èŠãã-HTMLã®JavaScript !! 1ã ãã®ç¶æ ã®ãããã°ãäžäŸ¿ã§ã-ãããã¬ãŒã¯å±æ§æ¬äœã«å ¥ããŸããã ãããã£ãŠãdependentObservableã®åœ¢åŒã§æ¡ä»¶ãŸãã¯ãã®ã³ã³ããŒãã³ããäœæãããããåŒãç¶ã䜿çšããæ¹ãç°¡åã§ãã
ãšããã§ããããã°ã®åé¡ã«ã å ã»ã©èšã£ãããã«ããããã¬ãŒã¯å±æ§æ¬äœãå ¥åããŸããã ããã¯ãapplyBindingsã§ãã¬ãŒã ã¯ãŒã¯ããã¹ãŠã®ã¿ã°ãå®è¡ãããã¹ãŠã®ãã€ã³ãã£ã³ã°ã®dependentObservablesãäœæããããã§ãã ãã¡ããã圌ã¯evalãéããŠãããè¡ããŸãã ããŸãè¯ããããŸããããèªã¿ããããšæž æœãã®éã®éžæã§ãã ãšããã§ãHTMLå±æ§ã§JavaScriptã³ãŒãã®äžéšãèŠãããšã¯ãonclickã®ãããªã€ã³ã©ã€ã³ã€ã³ã¿ãŒãããã®å€æãããã»ããµã«æ»ããšä¿¡ããŠãã人ã®ããã«ãç§ã¯èª°ãããªãã«ããã匷å¶ããªãããšãç¥ãããããšæããŸãã ããšãã°ã次ã®ããã«ãDOM-apiã䜿çšããŠãããããã³ã°ãããããšãã§ããŸããjQueryã®æ§ãããªKnockoutãµããŒãã©ã€ãã©ãª
ä»ã«äœïŒ jQuery-Tmplãã³ãã¬ãŒãã®ãµããŒãããããŸãã åœæããã®ãã©ã°ã€ã³ã¯jQueryã®äžéšã«ãªããšäºæ³ãããŠããŸããããéçºè ã®èšç»ã¯å€æŽãããŸããã äžæ¹ãMicrosoftã¯ããç©æ¥µçã«éçºããŠããŸãã-å¯äžã®éçºè ãä»ã®ãããžã§ã¯ãã«ç§»è¡ããŠããŸãã ãã®ããããã®ãããžã§ã¯ãã¯å°ãæ¢ãŸã£ãŠããŸããŸãã-ç§ã®äºæž¬ã§ã¯ããã1幎éããŒã¿1ç¶æ ã«ãªããŸãã ãã®åŸã圌ãã¯æšãŠãããããé ã«æµ®ãã¶ã§ãããã
ããããbeta1ã®å Žåã§ããç¹ã«Knockoutãšã®çµã¿åããã§ã¯ååã§ããããã«æããŸããã å®éããã®ãããžã§ã¯ãã§ã¯ããã³ãã¬ãŒãããžãã¯ã䜿çšããŸãããããããã¹ãŠã®åŒã¯äžæ¬åŒ§ã§å²ã¿ãŸãã Knockout foreachãå埩åŠçããæ¬äœã®å€ãšã¿ã°ã®å±æ§ãkoã䜿çšããŠçœ®ãæããŸãã ãŸããããŒã¿ãã€ã³ãå±æ§ã®äœ¿çšãéå§ããããããå Žæã«é©çšããŸãã次ã«ãko.observableArrayã®æäœãšçµã¿åãããŠforeachã䜿çšããŠã¬ã³ããªã³ã°ããå Žåãã³ã¬ã¯ã·ã§ã³å šäœã§ã¯ãªããå€æŽãããèŠçŽ ã®ã¿ãåæç»ããŸãã ãã®ãããå¯èœãªéãããããã®æäœã®ã¿ã«éå®ããå¿ èŠããããšèããŠããŸãã
ãã³ãã¬ãŒãã®ãã©ã¡ãŒã¿ãŒã§afterRenderã³ãŒã«ããã¯ãæå®ã§ããããšãå¿ããªãã§ãã ããã ãã®å©ããåããŠããã€ã³ããŒã®å©ããåããŠæ§ç¯ããã®ãäžäŸ¿ã§ããããšããã³ãã¬ãŒãã§å®äºããããšããŸãã¯ããã€ãã®è¿œå ã®ã¢ã¯ã·ã§ã³ãå®è¡ããããšãå¯èœã§ãã afterRenderã§ãŠã£ãžã§ãããéå§ããŸãïŒååšããå ŽåïŒã 2ã€ã®ãã©ã¡ãŒã¿ãŒãã³ãŒã«ããã¯ã«æž¡ãããŸãã 1ã€ç®ã¯ããã³ãã¬ãŒããã¬ã³ããªã³ã°ããDOMãã©ã°ã¡ã³ãã§ããrenderNodesArrayã§ãã 2çªç®-ããŒã¿-ãã³ãã¬ãŒãã«è»¢éãããããŒã¿ã
ãã®ãã¬ãŒã ã¯ãŒã¯ã奜ããªã®ã¯ãªãã§ããïŒ
äž»ã«å®£èšæ§ã®ããã æ¡ä»¶ãã«ãŒãããã¹ãã¬ãã«ã®ã³ãŒãã倧ãããªãã»ã©ããã®ã³ãŒãã®ç解ãä¿å®ããããã°ãé£ãããªãããšã«é·ãéæ°ä»ããŸããã ããã«ã以åç§ãããããã¹ãŠæ°ã«å ¥ã£ãŠããå Žåãä»ã§ã¯ã¢ã¯ã·ã§ã³èªäœãéå±ã«èŠããçµéšããããŸã-ã¿ã¹ã¯ãšãã®ãœãªã¥ãŒã·ã§ã³ã¯ã¯ããã«èå³æ·±ããã®ã§ããããœãªã¥ãŒã·ã§ã³ã®èª¬æã¬ãã«ãé«ãã»ã©ããããç解ãããããªãããã¹ãç¯ãå¯èœæ§ãäœããªããŸãã
UIã³ãŒãã®ãããã°ã¯ç°¡åã§ã¯ãããŸããã äžæ¹ã§ãåãããžãã¹ããžãã¯ãšæ¯èŒããŠç¹ã«è€éã«èŠããããšã¯ãããŸããã äžæ¹ã圌ã«è¿ã¥ãããšã¯å°é£ã§ãããæèããåŒãé¢ãããšã¯å°é£ã§ãããäŸãã°ããŠããããã¹ãã«å ¥ããããšã¯å°é£ã§ãã Knockoutã¯ãã³ãŒãã§ã¯ãªãã«ãŒã«ã䜿çšããŠUIãèšè¿°ããæ©äŒãäžããŠãããŸãã ããã¯å€§ããªãã©ã¹ã§ãã
ã«ãŒã«ãããŒã¯ã¢ããã§èšè¿°ãããŠãããšããäºå®ããã©ã¹ã§ã-ç§ã®æèŠã§ã¯ã ããŒã«ããŒã®åœ¹å²ãæ ãã»ã¯ã·ã§ã³ãšããã®åäœã«é¢ããã«ãŒã«ã次ã«ç€ºããŸãã ãšãŠãå¿«é©ã§ãïŒ ç¹å¥ãªãã¡ãããã©ã¹ãããŒã¯ã¢ããããã¶ã€ã³ããŒã«ã«ãšã£ãŠæ確ã§ãããšããäºå®ã«å ããŠãã«ã¹ã¿ã ã¿ã°ãXMLåå空éã¯ãããŸããã ãšãã£ã¿ãŒã¯åé¡ãªãHTMLãéããŸãã
ããã¯ã¢ãŠã察 ããã¯ããŒã³
Knockoutã®ä»æ¥ã®å€ãã®ä»£æ¿åã¯Backboneã§ãã ããã«ã¯ããããã®è¯ããã®ããããŸãã ã³ã¬ã¯ã·ã§ã³ã¯ã¢ã³ããŒã¹ã³ã¢ã§åäœããŸã-ããã¯ãå€æããžãã¯ããã£ã«ã¿ãªã³ã°ãªã©ãäœæãããšãã«å€§ããªãã©ã¹ã«ãªããŸãã ããŒã¿ããµãŒããŒãšåæããããã®ãµããŒãããããå±¥æŽç®¡çããããŸãã ããããUIã§äœæ¥ãããšãã¯ãDOMãšã®ãã¹ãŠã®ã¢ãã«æ¥ç¶ãæåã§èŠå®ããå¿ èŠããããŸãã é£ããããšã§ã¯ãããŸããããéåžžã«ç²ããŸãã ç¹ã«ç®ç«ããªãKnockoutãã€ã³ãã£ã³ã°ãªãã·ã§ã³ãæ¯èŒããå Žåãã³ãŒãã¯ã»ãšãã©ãããŸããã ãããããã®å調ãªã³ãŒããæåã§èšè¿°ããªããã°ãªããªããšããäºå®ã¯éåžžã«äžå¿«ã§ãã
äžæ¹ãKnockoutã§ã¯ãViewModelã®ã€ãã³ã以å€ã®ã¢ãã«åŽã«ã¯äœããããŸããã ããã¯ããŒã³ãšåŒ·ãã ãã§ãã å®éãç¹å®ã®ã©ã€ãã©ãªãåªå ããéžæã¯ãã³ãŒãå ã®UIãŸãã¯ã¢ãã«ã®ã³ã³ããŒãã³ãã®å€§ããã«åºã¥ããŠããå¿ èŠããããŸãã ãããã®ã©ã€ãã©ãªã䜿çšããã«ãŒããããããžã§ã¯ããäœæããŠãããšæ³åããŠãã ããã ã»ãšãã©ã®åé¡ãDOMåŽã§çºçãããšäºæ³ãããå ŽåãKnockoutã䜿çšããŠç掻ã楜ã«ããã®ãããããæåã§ãã çµ±ååŽã§äž»ãªåé¡ãçºçããå Žåã¯ãBackboneãé©ããŠããå¯èœæ§ããããŸãã
ç§ãå人çã«åæã§èŠãããã¯ã¢ãŠãã®åã®ããã¯ããŒã³ã®äž»ãªãã©ã¹ã¯ããµãŒããŒãšããŒã¿ãåæããæ©èœã§ãã ãã ããåæã¯ããµãŒããŒAPIãRESTã«ãŒã«ã«åŸãå Žåã«ã®ã¿æ©èœããŸãã å€ãã®äººããçŽ æŽããããšæããšãä»ãç§ã¯ãããæ©èœãããŸãã ãã ããRESTãšJSON-over-HTTPã¯åããã®ã§ã¯ãªããšããäºå®ãèŠèœãšããŠããŸãïŒ Backboneãæåã®ãã®ã§ããã«åäœããå Žå-ãªãœãŒã¹ã®URLãæå®ããã ãã§-2çªç®ã®ãã®ã§ã¯ãã¡ã€ã«ããå¿ èŠããããŸãã ãããŠãããªãã¯èªåèªèº«ã«åããããŸãïŒåæã¯åã«$ .ajaxãåŒã³åºããããåªããŠããŸããïŒ
ç§ãã¡ã®ãããžã§ã¯ãã§ã¯ãJSON-over-HTTPãç¹ã«æ±ãå¿ èŠããããŸããã ãŸãããµãŒããŒãšã®éã§éåä¿¡ããã¡ãã»ãŒãžã®çš®é¡ã®æ°ã¯å°ãªãããããŸã§ã®ãšãã4ã€ã ãã§ãã ãããã®1ã€ã ããããŒã¿ã®åæã§ãã ãã以å€ã¯ã1åéãã®ãŠãŒã¶ãŒã¢ã¯ã·ã§ã³ã§ãã ãããã®èª²é¡ãèªåã§äœæããå¿ èŠããããŸãããç§ã®ããŒã ã«ãšã£ãŠããã»ã©é£ããã¯ãããŸããã
ããŒã ãšããã°ã 4人ã®ãã¡ãç§ã ããJavaScriptã®çµéšããããŸãã å§ããããã«ãç§ã¯åœŒããšèšèªãšå³æžé€šã®ã³ãŒã¹ãå®æœããŸããã çµå±ã®ãšãããjQueryãè£ ã£ãŠããŠããæãè€éãªã®ã¯DOM APIã§ããããšãå€æããŸããã ããã¯ãCSSãåå ã§ãããã©ã®å±æ§ãäœã«è²¬ä»»ãããã®ãââãåçŽã«ç¥ããªãããã§ãã ãããã£ãŠã1ã€ã®ãªããžã§ã¯ãïŒViewModelïŒã䜿çšããŠããã¹ãŠã®äœæ¥ãããŒã«ã©ã€ãºã§ããããšãæ¬åœã«æ°ã«å ¥ã£ãŠããŸãã ç°ãªãããŒãã§äœæ¥ããŠãããããå®éã«ã¯äºãã®è¶³ãèžãããšã¯ãããŸããã
2ã€ã®ã©ã€ãã©ãªã®æ¯èŒã«èå³ãããå Žåã¯ã äžé£ã®æçš¿ããããŸãã ç°¡åãªã·ããªãªã®ã¢ããªã±ãŒã·ã§ã³ã«ã€ããŠèª¬æããŸãã ããããã·ããªãªã¯ç°ãªããŸã:)
ç·Žç¿ãã
ããªããèžãŸãªããã°ãªããªãã¬ãŒããããã³å°é£ãåŒãèµ·ãããããã®ç¬éã«ã€ããŠããããããªãã«äŒããŸãããã
1. ViewModelãšModelã®éãã
誰ããéããæããããã§ã¯ãããŸããã ç°¡åãªã«ãŒã«ïŒ
- ã¢ãã«ã¯ããç§ã®ã¢ããªã±ãŒã·ã§ã³ã«ã¯äœããããäœãã§ããã®ãïŒããšãã質åã«çããŸãã
- ViewModel-ãããŒãžã«äœã衚瀺ããŠããŸããïŒããšãã質åã«å¯ŸããŠ
ãªããããããŠããã®ã§ããïŒ ãããŠãå€ããViewModelãã¢ãã«ãšããŠèŠå§ããŠãããšããäºå®ã«ã ããã§ã¯ãããã€ãã®è³ªåããããŸãã ããšãã°ããã¬ãŒã³ã¿ãŒã§ã¯ãååã®ãªã¹ãã匷調衚瀺ããã補åãããã³éžæãã補åã®ã€ã³ããã¯ã¹ã衚瀺ã§ããŸãã ããã«ãéžæãã補åãšã€ã³ããã¯ã¹ãä¿åããå¿ èŠããªããšèšã人ãããŸã-ããŒã¿ãéè€ããŠãããšèšããŸãã ãã ããã¢ãã«ãšã¯ç°ãªããViewModelã«åé·æ§ããããã©ããã¯é¢ä¿ãããŸããã ã¢ããªã±ãŒã·ã§ã³ã³ãŒããå€§å¹ ã«ç°¡çŽ åã§ããå Žåãããã¯ãªãã§ããïŒ
ãŸããå€ãã®äººãè€æ°ã®ViewModelã䜿çšã§ãããã©ãããå°ããŸãã å¯èœã§ãããå¿ èŠã§ããïŒ ç§ãã¡ã¯ãã®ãããªè©Šã¿ãããŸããããç§ãã¡ã®ééãã¯ãå 容ã«åŸã£ãŠViewModelã®éã§è²¬ä»»ãå ±æããããšã§ã-ã€ãŸããã¢ãã«ãšã³ãã£ãã£ãšããŠããããšé£æºããŠããŸããã äžæ¹ãViewModelsã¯ããŒãžã®ã»ã¯ã·ã§ã³ãè¡šãããããããç¬èªã®ã»ã¯ã·ã§ã³ã§ã®ã¿æ©èœããŸãã 次ã«ãããŒãžã®å¥ã®éšåã§1ã€ã®ViewModelã®ããŒã¿ã衚瀺ããå¿ èŠãããå ŽåãããŒã¿ãã€ã³ããä»ããŠçŽæ¥äœã衚瀺ãããŸããã
ããªããžã®ç§ã®ã¢ããã€ã¹ïŒããŒãžå šäœã«1ã€ã®ViewModelã䜿çšããŸã-ãã¹ãŠãæ£åžžã«æ©èœããŸãã ãªããžã§ã¯ãã倧ãããªãå±éºæ§ããããŸãããã³ãŒããäœåºŠãæžãã®ãéªéãã人ã¯ããŸãã
_.extend(ViewModel, {
// <br>
})
* This source code was highlighted with Source Code Highlighter .
ãã®ãããªãããã¯ã¯ãæ©èœãã¢ãžã¥ãŒã«ã«åå²ã§ããŸãã
2.ããã¯ã¢ãŠãã¢ãã«ã®äŸã¯å®å šã«ååšããããµããŒã¿ãŒèªèº«ããµãŒããŒäžã«ãããšåŸ®ç¬ãã§èšãã«ãããããããä¿¡ããããŸããã
ã¯ã©ã€ã¢ã³ãã«ãã¢ãã«ãããããã³ã§ã¢ãã«ãäœæããå¿ èŠããããŸããBackboneãšã¯ç°ãªããKnockoutã¯ãããæ¯æŽããŸããã äžæ¹ã§ãããã»ã©æãã¯ãªãã®ã§ãããªãã®åžžèãšäžè¬çãªè¡çèŠåãããªããå©ããŸãã ã€ãã³ããšã¢ãžã¥ãŒã«æ§ãšãã2ã€ã®ããšãå¿ããªãã§ãã ããã Ajaxã³ãŒããåé¡ã«ãªãå Žåã¯ã AmplifyJSã«æ³šç®ããŠãã ãã ã
3.æ®å¿µãªãããKnockoutãã¢ããªã³ã°ãæ¯æŽããããšãããŸããªã±ãŒã¹ã§ããããŸãæ©èœããŸããã
ko.toJSONã¡ãœããã¯ãdatesã®æäœæ¹æ³ãèªèãã ããããã«nullãæžã蟌ã¿ãŸãã ãããåé¿ããæ¹æ³ã¯ãããŸããããããã¯ãã¹ãŠå°ãäžåšçšã§ãã æãç°¡åãªã®ã¯ãå€JSON.stringifyïŒdateïŒïŒïŒãæã€å¥ã®dependentObservableããããã£ãè¿œå ããããšã§ãããµãŒããŒã«éä¿¡ã§ããæååãååšããã ãã§ãã ãããããïŒ -åæ¥ä»ã«2ã€ã®ãã£ãŒã«ãããããããŒã·ã£ãªã³ã°ã¯äžæ¹åã«ã®ã¿æ©èœããŸãã ãã®ãããå¥ã®æ¹æ³ã§è¡ã£ããViewModelçšã«ç¬èªã®ã¯ããŒã©ãŒãäœæããæ¥ä»ãæ éã«åŠçããŸããã 幞ããªããšã«ãkoã¯unwrapObservableã¡ãœãããæäŸããŸãããã®ã¡ãœããã¯åçŽãªãªããžã§ã¯ããè¿ããŸãã ãã ãããããã¬ãã«ã§ã®ã¿æ©èœããããããªãã¶ãŒããã«ãä»ã®å Žæã«æ®ã£ãŠããå Žåã¯ãçµæã®ãªããžã§ã¯ãã®ãã¹ãŠã®ããããã£ããã€ãã¹ããå¿ èŠããããŸã
4.ãã³ãã¬ãŒãåã«ãããããããä»ã®æ¹æ³ã䜿çšããŠDOMãäœæããå¿ èŠãããå ŽåããããŸãã
ããã¯ãç¹ã«ãŠã£ãžã§ãããšãµãŒãããŒãã£ã®ã³ã³ããŒãã³ãã«åœãŠã¯ãŸããŸãã ãã®ãããªå Žåãkoã¯å¹²æžããããšããããŸãïŒããšãã°ãã³ã³ããŒãã³ããåçŽãªé åãå¿ èŠãšããå ŽåããããŠç§ãã¡ã®å Žåãããã¯observableArrayã§ãã ã³ã³ããŒãã³ãã³ãŒãå ïŒ
items.pop()
* This source code was highlighted with Source Code Highlighter .
ã§ãããã«ããã
items().pop()
* This source code was highlighted with Source Code Highlighter .
ããã¯ãã¹ãŠç¶æ³ã«äŸåããŸãã æã ãå éšäœ¿çšã®ããã«ã³ã³ããŒãã³ãã«ããããé©çšããŸã-ç¹ã«å°ããå Žåãããã§ã«äœããã®å€æŽãå ããããŠããå Žåã ããããã»ãšãã©ã®å Žåãããã«ã©ãããããŠããªãé åãæž¡ããã»ãšãã©ã®å Žåã2ã€ã®ãã³ãã©ãŒãèšè¿°ããŠãã³ã³ããŒãã³ãã®ããŒã¿ãå€æŽããViewModelã®ããŒã¿ãå€æŽããããã«ãå€æŽã®ãµãã¹ã¯ãªãã·ã§ã³ãåŠçããå¿ èŠããããŸãã
5.ããã¯ã¢ãŠãã¯ãåŸæ¥ã®ããžãã¹ã·ããªãªã§éåžžã«ããŸãæ©èœããŸãã
ãã©ãŒã ãããŒã¿åºåãããŒãã«-ã¢ããªã±ãŒã·ã§ã³ããããšãŸã£ããåãå Žåã100ïŒ é©åããŸãã
ç§ãã¡ã®ãããžã§ã¯ãã®ããã«ãSVGãCanvasãæäœãããªã©ããšããŸããã¯ãªãã®ããããå€ãã®DOMèŠçŽ ãã³ã³ãããŒã«ãªãã§åçã«äœæããã³å€æŽãããå Žåãçåãããã¯ãã§ãã ç§ãã¡ã¯koãéžæããŸããããªããªãã圌ãšBackboneã®äž¡æ¹ã®ãããžã§ã¯ãã§ã¯ãäžè¬çãªæå³ãããŸããªãããã§ããã³ãŒãã®3åã®2ã¯ããããã®ã©ã€ãã©ãªãå®è¡ããã¿ã¹ã¯ã«ãŸã£ããé¢é£ããŠããŸããã ããããKnockoutã®æ®ãã®3åã®1ã§ãããã䟿å©ã«æããŸããã
ããã¯ã¢ãŠããšããã¯ããŒã³
ããªãã®å€ãã¯ãèšäºãèªã¿ãªããBackboneãšKnockoutãçµã¿åãããããšãèããŠãããããããŸããã æ®å¿µãªãããããã¯èšããããç°¡åã§ãã ãã¬ãŒã ã¯ãŒã¯ã®æ©èœã¯å€ãã®ç¹ã§éè€ããŠããããããã¬ãŒã ã¯ãŒã¯éã«ç·ãåŒãå¿ èŠãããå Žæãå€æããããšã¯å°é£ã§ãã Knockout ViewModelãšBackbone Modelã®éã§ãããå®è¡ããããšããŸããããçµæãšããŠã³ãŒããé¢åã«ãªããããŸããïŒBackboneã¢ãã«ãšçµã¿åããããµã€ãºãViewModelããµãŒããŒã«æ¥ç¶ããããã«äœæãããã®ããã倧ãããªãããŒã¿ã·ã³ã¯ããã€ã¶ãŒãäœæããå¿ èŠããããŸããã ãããã°ãè€éã§ãããåæã¯ç§ãã¡ãæãã§ããã»ã©ãµãŒãã¹ã«äœ¿çšããã«ã¯äŸ¿å©ã§ã¯ãããŸããã§ããã
ãããã£ãŠãä»ã®ãšãããã©ã¡ãããéžæããå¿ èŠããããŸãã å°æ¥çã«ã¯ãããã¯ããŒã³ãã€ã³ããŒãšKnockoutã®Syncã®ã¢ããã°ã確å®ã«ç»å ŽããŸãã ããªããéæè ã§ãããBackboneã®ç±çãªãµããŒã¿ãŒã§ããããã®äžã®ãã€ã³ãã£ã³ã°ãèŠãããšæããªããããäžã€ã®ãã³ãããããŸãã jQuery-Linkãã芧ãã ããã ããã¯Microsoftã®å¥ã®ãã©ã°ã€ã³ã§ãããjQuery-Tmplã®ããã«ç·©ããã«å€æŽãããŠããŸãã ããã«ããããããããã€ã³ããŒã®å®è£ ã®åºç€ã«ãªããŸãã
ãã€ã¯ããœããèªäœã¯ããã°ããåŸ ã£ãŠæ 床ã確èªããããã§ãã Knockoutã®äœè ã§ããã¹ãã£ãŒãã»ãµã³ããŒãœã³ã¯åœŒãã®ããã«åããŠãããMIX11ã«é¢ãã圌ã®ãã¬ãŒã³ããŒã·ã§ã³ã®ãããªã¯æã人æ°ããããIE10ãããã©ãŒãã³ã¹ã®æé©åããããŠå°æ¥ã®HTML5ãEcmaScriptãããã³ãã®ä»ã®äŒæ¥ãã¯ãããžãŒã«é¢ãããã¹ãŠã®ããŒããŒããšãã¹ãŠã®ãã¬ãŒã³ããŒã·ã§ã³ãè¿œãæããã çŸåšãã¹ãã£ãŒãã¯ã.netã®ã¹ã¿ãŒã§ããã¹ã³ããã¬ã¹ãªãŒãšäžç·ã«äžçãæ ãã圌ã®åµé ç©ãçã«èŠããŠããŸãã ãããŠä»é±ã圌ã¯æ°ãããã¬ãŒãã³ã°è³æãå ¬éããŸããã ãã¬ãŒã ã¯ãŒã¯ãæåããå ŽåãäŒç€Ÿã¯jQueryãšåãæ¹æ³ã§ããããµããŒãããŸãã
ããã¯ããŒã³ãã©ãã«ãè¡ããŸãããRubyistãNodeJSããã°ã©ããŒããããŠJavaScriptã³ãã¥ããã£ã®åè¡æŽŸå šäœã«å€§ããªé¢å¿ãå¯ããããŠããŸãã ã ããããããã®ãããããéžæãããšãããªãã¯ç¢ºä¿¡ããããšãã§ããŸã-ããªãã¯å€±ãããŸããïŒ