Vaadin 7ã«ã¯ããã£ãŒããæäœããããã®åªããå ¬åŒã¢ããªã³ããããŸãããåé¡ã¯ç¡æã§ã¯ãªããã»ãŒ500ãã«ãããããšã§ãïŒ ç§ã¯ãã®ãããªãéã䜿ããããªãã£ãã®ã§ãç¡æãã代æ¿åãæ¢ãããšã«ããŸããããæ®å¿µãªãããå質ãå®å šã«äžååã§ããããšãããã£ãã®ã§ããã£ãŒããæäœããããã®å ¬åŒã¢ããªã³ã«æ³šæãåããŠãããããã詳ãã調æ»ããããšã«ããŸããã
ãã®è¿œå ã¯ãåªããjavascript Highchartsã©ã€ãã©ãªã®åãªãã·ã§ã«ã§ããã loããã³beholdã¯ãéå¶å©ãããžã§ã¯ãïŒçŸæç¹ã§ã¯ç§ãã¡ã®ãããžã§ã¯ãã§ããããã®ã¹ããŒã¿ã¹ãå€æŽãããããåçšã©ã€ã»ã³ã¹ãåãã§è³Œå ¥ããŸããã ïŒãçŽ æŽããã代æ¿ã©ã€ãã©ãªAmchartsããŸã ãããŸãããããã§ãåã®ãã®ã«çãŸãããšã«æ±ºããŸããã
ã¡ãªã¿ã«ãVaadinéçºè ã¯ãäŒæ¥ã©ã€ã»ã³ã¹ãè³Œå ¥ããå¿ èŠããããšããäºå®ã«ããããã£ãŒãã®æäœã«é¢ããè¿œå ãéåžžã«åŒ·ãæ±ããŠããçç±ã説æããŠããŸãã
ã©ã€ãã©ãªã決å®ããŸããããåé¡ã解決ããããã«æ®ã£ãŠããŸãããšã«ããããããããžã§ã¯ãã«æ¥ç¶ããã«ã¯ã©ãããã°ããã§ããïŒ
ãã®èšäºã¯2ã€ã®éšåã§æ§æãããŠããŸãã æåã®éšåã¯ãjavascriptã©ã€ãã©ãªãvaadinãããžã§ã¯ãã«æ¥ç¶ããæ¹æ³ã«é¢ããèšäºã®ç¿»èš³ã§ãã2çªç®ã®éšåã§ã¯ãåŸãããç¥èã䜿çšããŠã°ã©ãã衚瀺ããã©ã€ãã©ãªãäœæããæ¹æ³ã«ã€ããŠèª¬æããŸãã
ã ãã...
Vaadin 7ã¯JavaScriptã³ã³ããŒãã³ãã倧奜ã
Vaadin 7ã§JavaScriptã³ã³ããŒãã³ãã䜿çšããã®ã¯ç°¡åã§ãã ãã¡ãããVaadinã«ã¯é·ãéWindow.executeJavaScriptïŒïŒã¡ãœããããããŸãããããã®ã¡ãœããã«ã¯ããªãã®å¶éããããŸãã ããšãã°ãJavascriptãã¡ã€ã«ãšã®äŸåé¢ä¿ãããå ŽåãåŒã³åºãåã«ãããã®èªã¿èŸŒã¿ãä¿èšŒããããšã¯å°é£ã§ãã
ä»ã®Vaadin 7 GWTã³ã³ããŒãã³ããšåæ§ã«ãJavaScriptã³ã³ããŒãã³ãã¯4ã€ã®éšåã§æ§æãããŠããŸãã
- ãµãŒããŒã³ã³ããŒãã³ãïŒãµãŒããŒåŽã³ã³ããŒãã³ãïŒã
- ç¶æ
- ã³ãã¯ã¿ãŒ
- ãŸããã¯ã©ã€ã¢ã³ãã³ã³ããŒãã³ãã¯ã¯ã©ã€ã¢ã³ãåŽã®ãŠã£ãžã§ããã§ãã
åçŽãªäŸã§ã¯ïŒããšãã°ã以äžã§èª¬æããããã«ïŒãã³ãã¯ã¿ãšã¯ã©ã€ã¢ã³ããŠã£ãžã§ãããçµã¿åãããæ¹ãç°¡åã§ãã ãã ããå®æããjavacsriptãŠã£ãžã§ãããJavascriptã³ã³ããŒãã³ãã®æ©èœãšãªã³ã¯ããããšã«ããããŠã£ãžã§ããèªäœïŒã©ã€ãã©ãªïŒãå¶åŸ¡ããã³ãã¯ã¿èªäœã®ã¿ãèšè¿°ã§ããŸãã
GWTãŠã£ãžã§ããã§ã§ããããšã¯ã»ãŒãã¹ãŠãJavaScriptãŠã£ãžã§ããã§ãåãããšãã§ããŸãã 以äžã§ã¯ãç°¡åãªäŸãèŠãŠãããŸããŸãªéšåãã©ã®ããã«æ©èœãããã瀺ããŸãã
以äžã®äŸã§ã¯ãåã«ã¡ãã»ãŒãžã衚瀺ããŸãã
ãµãŒããŒåŽ
@JavaScript({ "js_label.js" }) public class JsLabel extends AbstractJavaScriptComponent { public JsLabel(String xhtml) { getState().xhtml = xhtml; } @Override protected JsLabelState getState() { return (JsLabelState) super.getState(); } }
ã芧ã®ãšãããã³ã³ããŒãã³ãã¯éåžžã«åçŽã§ãã 1ã€ã®ãã©ã¡ãŒã¿ãŒãæã€ã³ã³ã¹ãã©ã¯ã¿ãŒã®ã¿ã宣èšãããŸã-衚瀺ããå¿ èŠãããããã¹ãã ãã®ãã©ã¡ãŒã¿ãŒã¯ãäžè¬çãªç¶æ ã䜿çšããŠã¯ã©ã€ã¢ã³ãåŽã«æž¡ãããŸãã ã³ãŒãã®éèŠãªéšåã¯ãJsLabelã¯ã©ã¹ãæ¡åŒµãã泚éã§ãã
JavaScriptã¯ããŠã£ãžã§ããã«å¿ èŠãªJavaScriptãã¡ã€ã«ã«ã€ããŠVaadinã«éç¥ããŸãã ãã®äŸã§ã¯ãjs_label.jsã®ã¿ãå¿ èŠã§ããããã¯ãJsLabelã®ã¯ã©ã€ã¢ã³ãåŽã®å®è£ ã§ãã ãã¡ã€ã«ãžã®çžå¯Ÿãã¹ãæå®ãããããJsLabelã¯ã©ã¹ãšåãjavaããã±ãŒãžå ã«ããå¿ èŠããããŸãã ãããã£ãŠãç§ã®IDEã§ã¯ãjs_label.jsãšJsLabel.javaã¯äžŠãã§é 眮ãããŠããŸãã å¿ èŠã«å¿ããŠãè€æ°ã®ãã¡ã€ã«ãJavaScriptã¢ãããŒã·ã§ã³ã®æååé åãšããŠãªã¹ãã§ããŸãããŸããURL圢åŒã§ãã¹ãæå®ããããšãã§ããŸãã
AbstractJavaScriptComponentã¯ãæ¡åŒµããã¯ã©ã¹ã§ãã å ±æç¶æ ãªããžã§ã¯ãã䜿çšããŠãJavaScriptãšVaadinã®éã®åæ¹åéä¿¡ãäœæã§ããŸãã
äžè¬çãªç¶æ ã¯ã©ã¹ãæäœããããã«getStateïŒïŒã¡ãœããããªãŒããŒã©ã€ããããããVaadinã¯ã©ã®ç¶æ ã¯ã©ã¹ã䜿çšãããããç¥ã£ãŠããããšã«æ³šæããŠãã ããã ãã®åäœã¯JavaScriptComponentã«åºæã®ãã®ã§ã¯ãããŸãããããã¹ãŠã®Vaadin 7ã³ã³ããŒãã³ãã«å ±éã§ãã
ç¶æ å€å®
public class JsLabelState extends JavaScriptComponentState { public String xhtml; }
ç¶æ ãªããžã§ã¯ãã®å¯äžã®ç®çã¯ããµãŒããŒåŽãšã¯ã©ã€ã¢ã³ãåŽã®éã§åæ¹åã«ããŒã¿ã転éããããšã§ãã äœæããã«ã¯ãJavaScriptComponentStateãæ¡åŒµããå¿ èŠããããŸãã
ã³ãŒããç°¡æœãã€JavaScriptãšå¯Ÿç§°ã«ä¿ã€ããïŒä»¥äžãåç §ïŒãxhtmlãã£ãŒã«ãããããªãã¯ãšããŠå®çŸ©ããããšã«ããŸããã ã²ãã¿ãŒãšã»ãã¿ãŒãããã«è¿œå ããããšã劚ãããã®ã¯äœããããŸããããç¶æ ã¯ã©ã¹ã¯ããŒã¿è»¢éã®ã¿ãç®çãšããŠããããã®äžã«ããžãã¯ããªãããïŒããã«ã¯ååšããªãã¯ãã§ãïŒããã®å Žåã®ãã£ãŒã«ãã«ã¯ã²ãã¿ãŒãšã»ãã¿ãŒã¯å¿ èŠãããŸããã
泚ïŒç¶æ ã¯ã©ã¹ãå éšJsLabelã¯ã©ã¹ã«ããŠãã³ãŒããåæžã§ããŸãã ãã®ã¢ãããŒãã®åé¡ã¯ãçµã¿èŸŒã¿ç¶æ ã¯ã©ã¹ãJavaScriptã³ã³ããŒãã³ãã§ã®ã¿æ©èœããããšã§ãã GWTã®æ±çšç¶æ ã¯ã©ã¹ã¯ãããã€ãã®ç¹å¥ãªå Žåãé€ããå éšã¯ã©ã¹ãšããŠæ©èœããŸããã ããã«ãäœããã®çç±ã§getStateïŒïŒã¡ãœãããåŒã³åºããããªãå Žåãç¶æ ãå€æŽãããã³ã«markAsDirtyïŒïŒã¡ãœãããæåã§åŒã³åºãããšãå¿ããªãã§ãã ããã ãããã£ãŠãæ··ä¹±ãé¿ããããã«ãç¶æ ã¯ã©ã¹ãã³ã³ããŒãã³ãããåé¢ããŠããããšã匷ããå§ãããŸãã
ã¯ã©ã€ã¢ã³ãåŽ
org_vaadin_blog_JsLabel = function() { var e = this.getElement(); this.onStateChange = function() { e.innerHTML = this.getState().xhtml; } }
JavaScriptã¢ãããŒã·ã§ã³ã§ä»¥åã«æå®ããã®ã¯ããã®js_label.jsãã¡ã€ã«ã§ãã ããã§æ³šæãã¹ãããšã2ã€ãããŸããé¢æ°ã®ååãšããã®äœ¿çšã§ãã
åŸããªããã°ãªããªãåœåèŠåããããŸãã ããã«ãããVaadinã¯ãã³ã³ããŒãã³ãã䜿çšããããšãã«JavaScripté¢æ°ãæ£ããåŒã³åºãããšãã§ããŸãã ãµãŒããŒã³ã³ããŒãã³ãã®å®å šä¿®é£Ÿã¯ã©ã¹åãååŸããããããã¢ã³ããŒã¹ã³ã¢ã«çœ®ãæããŸãã ãã®å ŽåãJavaScripté¢æ°ã¯org_vaadin_blog_JsLabelãšåŒã°ããã¹ãã§ãã ååãééããå ŽåãVaadinã¯é¢æ°ãã©ã®ããã«åŒã³åºãããã¹ãããïŒåœŒã®æèŠã§ã¯ïŒæããŠãããŸãã
AbstractJavaScriptComponentã¯ã©ã¹ã®JavaDocã§è©³çŽ°ãèªãããšãã§ããŸãïŒ alpha 3ã®JavaDocããã¥ã¡ã³ããžã®ãªã³ã¯ããã®äŸã§ã¯ãthis.getElementïŒïŒã®ã¿ã䜿çšããŠVaadinãŠã£ãžã§ããçšã«äœæãããDOMèŠçŽ ãååŸããthis.getStateïŒïŒã§ç¶æ ã«ã¢ã¯ã»ã¹ããŸããã®å Žåãç¶æ ããXHTMLæååãèªã¿åãããããDOMèŠçŽ innerHTMLã«æ¿å ¥ããŸããæ®å¿µãªãããç¶æ ã³ã³ããŒãã³ãã¯ã¯ã©ã€ã¢ã³ãåŽã§æŽæ°ã§ããªãããããããã®å€æŽã¯ãµãŒããŒåŽã§åä¿¡ãããŸãã
åè¿°ã®ããã«ããã®ãã¡ã€ã«ã¯åæã«ã³ãã¯ã¿ã§ãããŠã£ãžã§ããã§ãã ã³ãã¯ã¿ã®åœ¹å²ã¯ãç¶æ ãšãŠã£ãžã§ããããã€ã³ãããããšã§ãã ãã®å Žåãåé¢ã¯ã³ãŒããè€éã«ããã ããªã®ã§ããŠã£ãžã§ãããšã³ãã¯ã¿ã1ã€ã®javascriptãã¡ã€ã«ã«çµåããŸããã
ç¶æ ã®getterããã³setterã¯JavaScriptåŽã§ã¯äœ¿çšã§ãããéåžžã®ããããã£ãšåæ§ã«ãã£ãŒã«ããæäœããããšã«æ³šæããŠãã ããã ããã¯ãç¶æ ã¯ã©ã¹ã«ã¢ã¯ã»ã¹ã¡ãœãããæ瀺çã«èšè¿°ããå Žåã«ãåœãŠã¯ãŸããŸãã
ãããã£ãŠãJavaScriptã³ã³ããŒãã³ããæ¢åã®ãŠã£ãžã§ããïŒjsã©ã€ãã©ãªïŒã«æ¥ç¶ããããã®äŸ¿å©ãªã¡ã«ããºã ããããŸãã ããã¯ãJavaScriptããããã¯ã©ã€ã¢ã³ãåŽã§å°ãããŠé«éãªæ©èœãããã°ã©ã ããå Žåã«äŸ¿å©ã§ãã ããããããã«ãããããããGWTã¯Vaadinã®ããè€éã§ä¿¡é Œæ§ã®é«ãã³ã³ããŒãã³ããäœæããããã®æè¯ã®ä»£æ¿æ段ã§ãã
次ã®èšäºã§ã¯ããã®ç¥èã䜿çšããŠãHighchartsãã£ãŒããæäœããããã®ã©ã€ãã©ãªã®javascriptã©ãããŒãäœæããæ¹æ³ã詳现ã«èª¬æããŸãã