ã©ã€ãã©ãªèªäœã¯jQueryã®èª¿æŽãšããŠæ©èœããŸãã å®éã«ã¯ãjQueryãžã®äŸåã¯æ¡ä»¶ä»ãã§ãããå¿ èŠã«ãªããŸã§ã©ã€ãã©ãªèªäœãšå ±æã§ããŸãã
Jiantã䜿çšãããšãè€éãªã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ãäœæããŠããµããŒããšéçºãå€§å¹ ã«ç°¡çŽ åã§ããŸãã
ç°¡åãªèæ¯
ç§ã¯10幎以äžã«ããã£ãŠWebã¢ããªã±ãŒã·ã§ã³ãéçºããŠããŸãã éå»æ°å¹Žéãç§ã¯GWTãåžžã«äœ¿çšããŠããŸãã æ®å¿µãªãããGoogleã¯ãã®ã©ã€ãã©ãªã®æãæ·±å»ãªåé¡ã§ããã³ã³ãã€ã«ã®é 延ã解決ã§ããŸããã§ããã æ°ããããŒãžã§ã³ã®ãªãªãŒã¹ïŒ2.4ãã2.5ïŒã§ã®é·ãäŒæ¢ãšGWTã®ãµã€ããžã®ç§»è¡ã®åŸãç§ãåããŠããäŒç€Ÿã®æåãªéçºè ïŒããŸãç¥ãããŠããªãïŒã¯ãGWTãšææºããæãæ¥ãããšã«åæããŸããã jQueryã§ã®éçºãç¶ããããšã«ããŸããã ããããGWTã¯ãçŽç²ãªjavascriptããã°ã©ãã³ã°ã«ã¯æããã«æ¬ ããŠããéåžžã«äŸ¿å©ãªéçºãåå°ç¥çµããæ€ãä»ããŸããã ç¹ã«ããã¬ãŒã³ããŒã·ã§ã³ãšããžãã¯ãåé¢ããMVCã¢ãããŒããEventBusã æ°ããç¶æ³ã®äžäŸ¿ããšäžå¿«æã¯ã次第ã«çºå±ãå€å®¹ããããã€ãã®ã¢ã€ãã¢ã«ã€ãªããã以äžã«èª¬æãã解決çã«ã€ãªãããŸããã
ãŸããã©ã€ãã©ãªãäœæããåã«ãBackboneãªã©ã®æ¢åã®MVCãœãªã¥ãŒã·ã§ã³ãèŠã€ããŸããããå®åã³ãŒãã®éïŒå¿ èŠãªå®£èšã®åé·æ§ïŒã«ã¯ããŸãæºè¶³ããŠããŸããã§ããã
ã¡ãªãã
å®éã«ãèªãã€ã³ã»ã³ãã£ããåŸãããã«ãå ã«é²ã¿ãäž»ãªå©ç¹ããªã¹ãããŸãã
- ã³ãŒãè£å®ïŒèªåè£å®ïŒ-æåå宣èšã®ä»£ããã
- ã€ã³ã¿ãŒãã§ã€ã¹ã®å®å šãªæœè±¡åãšãããžãã¯ãšãã¬ãŒã³ããŒã·ã§ã³ã®åé¢
- ç¹å®ã®ã³ãŒããã©ã°ã¡ã³ãã®å®è¡äžã§ã¯ãªããã¢ããªã±ãŒã·ã§ã³ã®èµ·åäžã«JavaScriptå€æ°ãWebããŒãžã®å®éã®èŠçŽ ã«ãã€ã³ãããããšã®æ€èšŒã ãã¶ã€ããŒã®éã³å¿ã®ããæããæ©èœã®éçºè ãããã«ä¿è·ãããã®
- å¯èœãªéãåçŽãªæ¹æ³ã§ã³ãŒãã¬ãã«ã§èªå·±ææžåãã-å°ãªããšåæã«ãç§ã¯èŠãããšããªã
- åã蟌ã¿ãç°¡å-ãã€ã§ãã©ãã§ãåã蟌ã¿ãå¯èœã§ãããã«ã¡ãªããã享åã§ããŸã
ãããŠãããããªããšã«ã€ããŠãã£ãšã
åå
ã©ã€ãã©ãªã®ã€ããªãã®ãŒã¯ã次ã®è«æã«åºã¥ããŠããŸãã ããããåºç€ãšãããšãããã«ãã¹ãŠãç°¡åã«ç解ã§ããŸãã
- ã€ã³ã¿ãŒãã§ãŒã¹ã¯ãäžé£ã®ãã¥ãŒïŒViewãViewïŒïŒã§æ§æãããŠããŸãããã·ã¢èªã§åèªãèŠã€ããããšã¯å°é£ã§ãããããã¯ãŠã£ãžã§ããã§ã¯ãªããç»é¢ã§ããªãããã§ãã ãããã¯ãã€ã³ã¿ãŒãã§ãŒã¹ã®ãŠããŒã¯ã§æå³ã®ããéšåã§ãã 顧客ã®è©±ãèãã ãã§ç°¡åã«éžæã§ããŸããããã«ãé£çµ¡å ç·šéç»é¢ãããããŸããããããããŠãŒã¶ãŒãªã¹ããã«ç§»åããŸãïŒããŒãžäžã«ã¯åæã«è€æ°ã®ãã¥ãŒã衚瀺ãããŸãïŒã
- åãã¥ãŒã«ã¯ãããªã¹ãã«æ»ããã¿ã³ããããŠãŒã¶ãŒã®ãªã¹ãã®ã³ã³ãããŒããããŠãŒã¶ãŒã®åçããªã©ã®èŠçŽ ã®ã»ãããå«ãŸããŠããŸãã ãããã®èŠçŽ ã¯ãåããã¥ãŒå ã§èå¥å¯èœã§ãã
ãæ¹æ³ãã決å®ããå¿ èŠããããšãã«ãžã£ã³ã°ã«ãééããããã€ãã®æè¡è«æãšåæ§ã«ïŒ 以äžãšççŸããªãããã«ïŒ
- ãŠãŒã¶ãŒãæçµçã«ç»é¢ã«è¡šç€ºããã®ã¯ãæ¬è³ªçã«htmlã³ãŒãã§ãã ãããŠãhtmlãã¬ã³ããªã³ã°ããæè¯ã®æ¹æ³ã¯äœã§ããïŒ htmlã®ã¿ã ã€ãŸãããŠãŒã¶ãŒã«ç¹å®ã®ã€ã³ã¿ãŒãã§ã€ã¹ã衚瀺ããå¿ èŠãããå Žå-ãŠãŒã¶ãŒã®htmlãããŒãžã«é 眮ããå¿ èŠãªãšãã«äœ¿çšããŸãã DOMãä»ããŠçæãã代ããã«ããã®å Žã§æååãæäœãŸãã¯é£çµããŸãïŒæãåçŽãªå Žåãé€ãïŒã ãŸãããã¶ã€ããŒã®ç掻ã楜ã«ãªããŸã-圌ã¯åã«htmlã³ãŒãããã¶ã€ã³ããŸãã
- ç¹°ãè¿ãèŠçŽ ã¯ãã³ãã¬ãŒãã«ãã£ãŠçæãããŸããããããããŒãžäžã®åãªãHTMLã³ãŒãã§ã
æãéèŠãªããšã¯ãJiantïŒjavascriptã€ã³ã¿ãŒãã§ãŒã¹æœè±¡è¡šèšæ³ïŒã¯ãäžé£ã®ããªãã¯ãããéçºå²åŠã§ãã ãã®å²åŠãéµå®ããŠéçºããã°ããã¹ãŠãç°¡åãã€èªç¶ã«æãç«ã¡ãŸãã
衚瀺ãã
èšèšäž
ãã®ãããæåã«å®è£ ã®è©³çŽ°ã«å ¥ããã«jsonã§ã€ã³ã¿ãŒãã§ãŒã¹ãèšèšããŸãã ããšãã°ãç»é²ãã©ãŒã ã«ã€ããŠãã¬ãŒã¿ãŒïŒãŸãã¯é¡§å®¢ïŒãèãã ãã§ãïŒããŠãŒã¶ãŒã«ååãšé»åã¡ãŒã«ãå ¥åããŠãç»é²ãã¿ã³ãæŒããšãç»é²ãããŠãããŠã£ã³ããŠã衚瀺ãããã¯ãªãã¯ããŠäžã«å ¥ããŸããã
èãããæžãããããªãããjsonã§èšè¿°ããŸãã
var registration = { // , views: { // views View registrationFormView: { // nameInput: jiant.input, // emailInput: jiant.input, // registerCtl: jiant.ctl // , }, successView: { // continueCtl: jiant.ctl // , , }, errorView: { // errorMessage: jiant.label, // disposeCtl: jiant.ctl // } } };
ããããã¹ãŠç解ããæ¹æ³ã¯ïŒ ã³ãŒãã次ã®ããã«èªã¿åããŸãããã¢ããªã±ãŒã·ã§ã³ã¯ãç»é²ãã©ãŒã ãæåã¡ãã»ãŒãžããšã©ãŒã¡ãã»ãŒãžã®3ã€ã®ãã¥ãŒã§æ§æãããŠããŸãã ç»é²ãã©ãŒã ã«ã¯ã2ã€ã®å ¥åãã£ãŒã«ããš1ã€ã®ã³ã³ãããŒã«...ãå«ãŸããŸãã ããã§ã®jiant.inputããã³jiant.ctlã¯ãææžåã®ã¿ãç®çãšããŠããŸãã ããšãã°ã次ã®ããã«æžãããšãã§ããŸãããæ©èœããŸãããèªããšãããã«ãããªããŸãã
var registration = { views: { registrationFormView: { nameInput: 1, emailInput: 1, registerCtl: 1, }, successView: { continueCtl: 1 }, errorView: { errorMessage: 1, disposeCtl: 1 } } };
å®çŸãã
ã€ã³ã¿ãŒãã§ã€ã¹ãå¯èœãªéãæãç°¡æœã§ç°¡æœãªæ¹æ³ã§èšè¿°ãããã®ã§ãã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ããžãã¯ãå®è£ ããã€ã³ã¿ãŒãã§ã€ã¹èªäœãHTMLã³ãŒãã§å®è£ ããŸãã ãã®çµæãMVCãjson-html-javascriptã®åœ¢åŒã§ååŸããŸãã æåã«ã次ã®ã«ãŒã«ã«åŸã£ãŠãHTMLãã¥ãŒèªäœãå®è£ ããŸãã
- åãã¥ãŒã«ã¯ã察å¿ããIDãæã€htmlèŠçŽ ããããŸã
- åViewèŠçŽ ïŒnameInputãregisterCtlïŒã¯ãViewèŠçŽ å ã«ãã察å¿ããã¯ã©ã¹ãæã€htmlèŠçŽ ã«å¯Ÿå¿ããŸã
RegistrationFormViewã®å®è£ ïŒ
<div id="_registrationFormView"> Your name: <input class="_nameInput"> <br> Your email: <input class="_emailInput"> <br> <button class="_registerCtl">Register</button> </div>
èå¥åãšã¯ã©ã¹åã®åã®ã¢ã³ããŒã¹ã³ã¢ã¯äœã§ããïŒ å°ãäžã«èª¬æãããŠããŸãã
åæ§ã«ãsuccessViewãå®è£ ããŸãã
<div id="_successView"> , ! <button class="_continueCtl">Continue</button> </div>
ããã³errorViewã
æœè±¡åãå ·çŸåãã
ãããã£ãŠãæœè±¡ã€ã³ã¿ãŒãã§ãŒã¹å®çŸ©ããããŸãã ãã®å®è£ ããããŸãã ããããæ¥ç¶ããæ¹æ³ã¯ïŒ
次ã®ããã«ïŒ
$(function() { jiant.bindUi("_", registration, true); });
ã§ãã
bindUié¢æ°ã¯ãViewãŸãã¯ViewèŠçŽ ã®åæœè±¡å®çŸ©ã«è¿œå ãããæåã®ãã©ã¡ãŒã¿ãŒãšããŠãã¬ãã£ãã¯ã¹ãåããŸãã ãã®å Žåãäžç·ãåŒãããŸãã 空ã®æååãæž¡ããšãjsonã®ååãšhtmlã®ã¯ã©ã¹èå¥åãäžèŽããŸãã htmlã³ãŒãã®å¯èªæ§ãé«ããããã«äžç·ã䜿çšãããšäŸ¿å©ã§ããæå³ã®ããã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ãããã«è¡šç€ºãããŸãã
2çªç®ã®ãã©ã¡ãŒã¿ãŒã¯ãã¢ããªã±ãŒã·ã§ã³ã®æœè±¡çãªå®çŸ©ãå«ãå€æ°ã§ãã jiantã¯ãããããã¥ãŒèŠçŽ ãåŒãåºããåãã¥ãŒããã®å®è£ ã«é¢é£ä»ããŸãã
3çªç®ã®ãã©ã¡ãŒã¿ãŒã¯ãããã°ã¢ãŒããå«ããããšã§ããããã«ããããšã©ãŒã®æ€çŽ¢ãç°¡çŽ åãããã³ã³ãœãŒã«ãžã®åºåéãå¢å ããŸãã
éæ³
ããããå°ããªéæ³ããã§ã«å§ãŸã£ãŠããŸãã bindUiã®å®è¡äžãåãã¥ãŒã¯èå¥åã«ããã€ã³ã¿ãŒãã§ã€ã¹å®çŸ©ããæ€çŽ¢ãããŸãã 次ã«ãçµæã®jQueryã©ãããŒãªããžã§ã¯ããå®çŸ©å€æ°ã«æ·»ä»ãããŸãã ã€ãŸããbindUiã®å®è¡åŸãregistration.views.registrationFormViewå€æ°ã«$ïŒ "#_ registrationFormView"ïŒã®çµæãå«ãŸããŸãã ãŸãããã¥ãŒã®åèŠçŽ ã¯ã¯ã©ã¹ã«ãã£ãŠæ€çŽ¢ãããå ¥åãããŸããã€ãŸããregistration.views.registrationFormView.registerCtlã«ã¯$ïŒ "#_ registrationFormView"ïŒãFindïŒ "._ registerCtl"ïŒãå«ãŸããŸãã
ãªã³ã¯ãèŠã€ãããªãå Žåã¯ãã³ã³ãœãŒã«ã«ãšã©ãŒãå ±åãããŸãã ãããŠããããã°ã¢ãŒãããªã³ã«ãªã£ãŠããå Žåããã¹ãŠã®ãšã©ãŒã®ãªã¹ããå«ãã¢ã©ãŒããæåŸã«çºè¡ããããããéçºè ã¯ãããèŠå€±ãããšã¯ãããŸããã
åºåã«ã¯ãå®éã®htmlèŠçŽ ã«å®å šã«æ·»ä»ãããã€ã³ã¿ãŒãã§ã€ã¹èšè¿°ãªããžã§ã¯ãããããŸãã ããã¯ã次ã®ããã«ããžãã¯ã³ãŒãã§äœ¿çšã§ããããã«ãªããŸããã
䜿çšãã
æãç°¡åãªæ¹æ³ã¯ãç¬èªã®åå¥ã®javascriptãã¡ã€ã«ãèšè¿°ããonUiBoundã€ãã³ãã«ç»é²ããããšã§ãã次ã«äŸã瀺ããŸãã
jiant.onUiBound(function($, app) { // jQuery wrapper var view = app.views.registrationFormView, errorView = app.views.errorView; // view.registerCtl.click(function() { errorView.hide(); if (view.nameInput.val() == "") { errorView.errorMessage.html(" !"); errorView.show(); } else if (view.emailInput.val() == "") { errorView.errorMessage.html(" !"); errorView.show(); } else { view.hide(); app.views.successView.show(); } }); });
æºåãã§ããããžãã¯ã èªããšããããã¯æããããŸããããè¯ãIDEã§ã¯-ãã®ã³ãŒãã®75ïŒ ã¯èªåè£å®ãããŸããã€ãŸã ã¹ãã«ã®æéãç¯çŽããã¿ã€ããã¹ã«ãããšã©ãŒã®å¯èœæ§ãæžãããŸããã
ä»ã«äœ
æéãçµã€ã«ã€ããŠããã³ãã¬ãŒããEventBusãããã·ã¥ããã²ãŒã·ã§ã³ããµãŒããŒã§ã®AJAXã®åäœã䜿çšããã»ã¹ã«è¿œå ãããŸããããããã¯ãã¹ãŠããªãŒãã³ã³ããªãŒãã«æãå奜çã§ãéçºè ã®æå°éã®åŽåã§æžã¿ãŸãã
AJAXå®çŸ©ã®äŸïŒ
var app = { ajax: { getDataFromServer: function(id, callback) {} } }
éçºè ããã以äžå¿ èŠãšãããã®ã¯ãããŸãããjiantèªäœãAJAXèŠæ±ã³ãŒããå®è£ ããŸãã
䜿çšããããã«æ®ããŸãïŒ
app.ajax.getDataFromServer(6345, function(data) { //do smth with data });
GWTãç¥ã£ãŠãã人-éåæãµãŒãã¹ãšå®å šã«é¡äŒŒããŠããããšãããã«ããããŸãã
ããã«
ãã®èšäºãå ¬éãããŠèå³ããããããããæ®ãã®æ©èœïŒãã³ãã¬ãŒããAJAXãç¶æ ãããã³ã€ãã³ããã¹ïŒãããã«èª¬æããæºåãã§ããŠããŸãã Gihubãããžã§ã¯ãã³ãŒãïŒ github.com/vecnas/jiant ã説æä»ãã®ãµã€ãïŒ sites.google.com/site/jiantscript/home