æåŸã®
èšäºã§ã¯ããèªè»¢è»ãïŒãã©ã€ãããã¬ãŒã ã¯ãŒã¯ã®ãã¬ãŒã ã¯ãŒã¯å
ã®ããŒããŒãšãã³ãã¬ãŒããšã³ãžã³ïŒã®èª¬æã«å°å¿µããŸããã éåœã®æå¿ã«ãããããã€ãã®ãããžã§ã¯ãã§ãã³ãã¬ãŒããšã³ãžã³ãéžæããã¹ã¿ã³ãã¢ãã³ããŒãžã§ã³ã«ããããšãäœåãªããããäžæ¹ã§ãå€ãã®æ°æ©èœãå
å®ãããŸããã ããã«ã€ããŠã¯ãããã³ããšã³ããã³ãã¬ãŒããšã³ãžã³ã«ã€ããŠèª¬æããŸãã
ããããããªãã®æéãç¯çŽããããã«ãæåã«ãã®èšäºãé¢çœããããããªã人ãæå®ããŸãïŒå€ãã®æçŽãããã®ã§ïŒïŒ
- ããªãã¯ããã³ããšã³ãéçºè
ã§ããããã³ãã¬ãŒãã®äœ¿çšã«èå³ããããŸãã
- ããªãã¯ããã¯ãšã³ãéçºè
ã§ãããããã³ããšã³ãã§ãã³ãã¬ãŒãã䜿çšããããšã«èå³ããããŸãã
- æ°å¹Žã«ããã£ãŠèç©ãããUIã³ã³ãããŒã«ã®ã³ã¬ã¯ã·ã§ã³ãäœç³»åããããŒã«ãé·ã鿢ããŠããŸããã
- Webã³ã³ããŒãã³ãã®éçºã«èå³ããããŸãã
- angularJSãæ¹å€ããŠæšå¥šããããšæããŸãã
- ããªãã«ã¯èªç±æéããããæ¬¡ã®èªè»¢è»ã«ã€ããŠèªãããšã«èå³ããããŸãã
- æã¯ãããŸããããèå³ããããŸãã
- ããªãã¯å¥œå¥å¿personçãªäººã§ãã
ãã®ãããžã§ã¯ãã¯Flex.PatternsãšåŒã°ããŸãããç°¡åã«ããããã«åã«ãã¿ãŒã³ãšåŒã³ãŸãã 以äžã¯ãç°¡åã«èªåèªèº«ãåçŸã§ããããã€ãã®äŸã§ãã åã®èšäºã§èª¬æããFlexãšã¯ç°ãªãããã¿ãŒã³ã¯èšå®ãã¿ã³ããªã³ãšã®ãã³ã¹ãå¿
èŠãšããŸãã-ããã¯ã¢ããããŠäœ¿çšããŸãã ãã¿ãŒã³ã¯äžè¬çã«éåžžã«ã·ã³ãã«ã§ããããç§ã®äž»ãªç®æšã§ããã
ããšãã°ããã¿ãŒã³å
ã®ãã³ãã¬ãŒãã¯åãªãHTMLããŒãžã§ããããã以äžã®ãã®ã§ã¯ãããŸããã EJSãä»ã®å€ãã®ãã³ãã¬ãŒããšã³ãžã³ã§äœ¿çšãããŠãããããªç¹å®ã®æ§æã¯ãããŸããã
<ul> <% for(var i=0; i<supplies.length; i++) {%> <li><%= supplies[i] %></li> <% } %> </ul>
ãã¿ãŒã³ã®æ§æå
šäœã¯ã3ã€ã®å®çŸ©ã«å¶éãããŠããŸãã
- ãã㯠ã {{name_of_hook}}ã ãã³ãã¬ãŒãå
ã®å ŽæãããŒã¯ããŠã³ã³ãã³ããæ¿å
¥ã§ããæãããã
- ã¢ãã« {{:: name_of_ reference}}ã ãããã£ãŠãããŒãã®ããããã£ãŸãã¯ãã®å±æ§ããã€ã³ãã§ããŸãããããã®ããããã£ã¯ãããã«æäœããããã«ã¢ãã«ãªããžã§ã¯ãã«é¢é£ä»ããå¿
èŠããããŸãã
- DOM {{$ name_of_reference}}ã ãã®ã©ãã«ãä»ããããŒããæããšããã®ããŒãã«ãã°ããã¢ã¯ã»ã¹ãã倿Žããã€ãã³ããæ·»ä»ããä»ã®æ¥åžžçãªããšãå®è¡ã§ããŸãã
ãã³ãã¬ãŒããäœæ
ããŠãäŸãèŠãŠã¿ãŸãããã ãŠãŒã¶ãŒãèªèšŒãããããã¢ãããäœæããŸãã 4ã€ã®ãã³ãã¬ãŒããå¿
èŠã§ãã
- ãããã¢ãã-html
- èªèšŒãŠã£ã³ããŠã®ããŒã¯ã¢ããã¯htmlã§ãã
- ããã¹ããã£ãŒã«ãã¯htmlã§ãã
- ãã¿ã³-html
以äžã¯ãããã¢ããã®ãã³ãã¬ãŒãã§ãã
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Flex.Template</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <link rel="stylesheet" type="text/css" href="pattern.css" /> </head> <body> <div data-style="Popup" id="{{id}}"> <div data-style="Popup.Container"> <div data-style="Popup.Title"> <p data-style="Popup.Title">{{title}}</p> </div> <div data-style="Popup.Content">{{content}}</div> <div data-style="Popup.Bottom"> <p data-style="Popup.Bottom">{{bottom}}</p> </div> </div> </div> </body> </html>
ãã§ã«ãæ°ä»ãã®ããã«ãããã¯æãäžè¬çãªHTMLãã¡ã€ã«ã§ãã HEADã«ã¯ãCSSãã¡ã€ã«ãšJSãã¡ã€ã«ãå«ããããšãã§ããŸãããããã®ãã¡ã€ã«ã¯ãã³ãã¬ãŒãã«èªåçã«å«ãŸãããã£ãã·ã¥ãããŸãã
ãã£ãã·ã¥ã¯ãã¿ãŒã³ã®éèŠãªéšåã§ãã ãã³ãã¬ãŒãïŒHTMLïŒãšãªãœãŒã¹ïŒCSSããã³JSïŒã®äž¡æ¹ãlocalStorageã«ä¿åãããŸããã€ãŸãããã³ãã¬ãŒããåå©çšãããšããã¹ãŠã®ããŒã¿ããµãŒããŒããã§ã¯ãªãã¯ã©ã€ã¢ã³ãããååŸãããã¬ã³ããªã³ã°éåºŠã«æãæå©ã«åœ±é¿ããŸãã ããã«ããã¿ãŒã³èªäœããã£ãã·ã¥ã®é¢é£æ§ãç£èŠããŸãããã¿ãŒã³ããã¹ãŠã®ãã¿ãŒã³ãšãã®ãªãœãŒã¹ã®HEADERãèŠæ±ãããã³ã«ã ãŸããäœãã倿Žãããå Žåããã¿ãŒã³ã¯ç¬ç«ããŠãã£ãã·ã¥ãæŽæ°ããã·ã¹ãã å
šäœãææ°ã®ç¶æ
ã«ä¿ã¡ãŸãã ãã ããæ¿èªãŠã£ã³ããŠã«æ»ããŸãã
ã¬ã€ã¢ãŠããã³ãã¬ãŒãïŒä»¥éãã¹ããŒã¹ãç¯çŽããããã«ãBODYã¿ã°ã®ã³ã³ãã³ãã®ã¿ãåŒçšããŸãïŒ
<div data-type="Pattern.Login"> <p>Login</p> {{login}} <p>Password</p> {{password}} <div data-type="Pattern.Controls">{{controls}}</div> </div>
ããã¹ããå
¥åããããã®ãã£ãŒã«ãïŒãã®å ŽåããŠãŒã¶ãŒåãšãã¹ã¯ãŒãã«ãªããŸãïŒ
<p>{{::value}}</p> <div data-type="TextInput.Wrapper"> <div data-type="TextInput.Container"> <input data-type="TextInput" type="{{type}}" value="{{::value}}" name="TestInput"/> </div> </div>
äžèšã®ã©ãã«{{:: value}}ã䜿çšããŠãvalueãšãã倿°ãä»ããŠINPUT.valueãšP.innerHTMLããªã³ã¯ããããšã«æ³šæããŠãã ããã ãããã£ãŠãINPUTã«ããã¹ããå
¥åãããšãé¢é£ããæ®µèœã«è¡šç€ºãããŸãã ããã«ãäœæãããå€å€æ°ãã¢ãã«ã«é
眮ãããŸãã
ããŠãæ¿èªãŠã£ã³ããŠã«å¿
èŠãªæåŸã®ãã³ãã¬ãŒãã¯ãã¿ã³ã§ãã
<a data-type="Buttons.Flat" id="{{id}}">{{title}}</a>
å
ã«é²ãåã«ãäºçŽãããŠãã ããã ãã¿ãŒã³ãæ¬æ ŒçãªHTMLãã¡ã€ã«ããã³ãã¬ãŒããšããŠäœ¿çšãããšããäºå®ã«ããã䜿çšãããããŒãžãšã¯å¥ã«ããããéãæ©äŒãäžããããããã«ãããã¹ã¿ã€ã«ãšããžãã¯ïŒããå ŽåïŒãè¿
éã«ãããã°ããããšãå¯èœã«ãªããŸãã
ãã³ãã¬ãŒããæ·»ä»ãã
ãã³ãã¬ãŒãã¯ã次ã®2ã€ã®æ¹æ³ã§ããŒãžã«æ·»ä»ïŒã¬ã³ããªã³ã°ïŒã§ããŸãã
- JavaScriptã¡ãœããåŒã³åºãçµç±
- HTMLããŒã¯ã¢ããçµç±ã
ã©ã¡ãã䜿çšãããã¯ãã¿ã¹ã¯ã®ã¿ã«äŸåããŸãã ããšãã°ãããŒãžãèªã¿èŸŒãã çŽåŸã«ãã³ãã¬ãŒããæç»ããå¿
èŠãããå Žåã¯ãããŒã¯ã¢ãããä»ããŠæ·»ä»ããããšããå§ãããŸãã æ¿èªãã¹ããŠã£ã³ããŠã®ãããªãã®ã«ã€ããŠè©±ããŠããå Žåã¯ãJavaScriptãä»ããåŒã³åºããããé©åã§ãã äž¡æ¹ã®æ¹æ³ãèŠãŠã¿ãŸãããã
JavaScriptã¬ã³ããªã³ã°
getã¡ãœããã¯ããã³ãã¬ãŒã-_patterns.getïŒïŒã®ã¬ã³ããªã³ã°ãæ
åœããŸãããã³ãã¬ãŒãã¯ã-renderã¡ãœãããä»ããŠããŠã³ãïŒæå®ãããããŒãã«ã¢ã¿ããïŒã§ãããã³ãã¬ãŒãã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãè¿ããŸãã 以äžã®äŸãèŠãŠãã ããããã¹ãŠãæããã«ãªããŸãã
var id = flex.unique(); _patterns.get({ url : '/patterns/popup/pattern.html', node : document.body, hooks : { id : id, title : 'Test dialog window', content : _patterns.get({ url : '/patterns/patterns/login/pattern.html', hooks : { login : _patterns.get({ url : '/patterns/controls/textinput/pattern.html', hooks : { type: 'text', } }), password: _patterns.get({ url : '/patterns/controls/textinput/pattern.html', hooks : { type: 'password', } }), controls: _patterns.get({ url : '/patterns/buttons/flat/pattern.html', hooks : [{ title: 'login', id: 'login_button' }, { title: 'cancel', id: 'cancel_button' }] }), } }) } }).render();
æãéèŠãªãã©ã¡ãŒã¿ãŒã¯URLã§ããããã§ããã³ãã¬ãŒãã®ååŸå
ãæå®ããŸãã åæ§ã«éèŠãªãã©ã¡ãŒã¿ãŒã¯ããã¯ã§ãã ãã³ãã¬ãŒãã§ãã©ãã«-{{name}}ãéããŠã³ã³ââãã³ãã®å Žæã瀺ããããšãæãåºããŠãã ããã hooksãã©ã¡ãŒã¿ãŒã§ã¯ããã®ãããªåã¿ã°ã®ã³ã³ãã³ããå®çŸ©ããŸãã
_patterns.getïŒïŒã¡ãœãããåããã¹ãŠã®ãã©ã¡ãŒã¿ãŒã®å®å
šãªèª¬æã¯ã
ããã«ãããŸã ã ãããŠããã®äŸã®çµæã¯
ããã«ãããŸã ã
ããããå
ã«é²ã¿ãŸãã
HMTLããŒã¯ã¢ãããä»ããã¬ã³ããªã³ã°
ããŒãžãèªã¿èŸŒãã çŽåŸã«çæããããã³ãã¬ãŒããå¿
èŠãªç¶æ³ã§ã¯ãPATTERNã¿ã°ã䜿çšããŠããã³ãã¬ãŒããããŒã¯ã¢ããã«çŽæ¥é
眮ã§ããŸãã
<pattern src="/patterns/popup/pattern.html" style="display:none;"> <id>0</id> <title>Test dialog window</title> <content src="/patterns/patterns/login/pattern.html"> <login src="/patterns/controls/textinput/pattern.html"> <type>text</type> </login> <password src="/patterns/controls/textinput/pattern.html"> <type>password</type> </password> <controls src="/patterns/buttons/flat/pattern.html"> <id>login_button</id><title>login</title> <id>cancel_button</id><title>cancel</title> </controls> </content> </pattern>
ãã®å Žåãåãååã®ã¿ã°ã䜿çšããŠããã¯ãèå¥ããŸãã ã€ãŸãã以äžã®2ã€ã®æ§æã®æå³ã¯åãã§ãã
<pattern src="/patterns/popup/pattern.html" style="display:none;"> <id>0</id> <title>Test dialog window</title> ... </pattern>
_patterns.get({ url : '/patterns/popup/pattern.html', hooks : { id : 0, title : 'Test dialog window', ... } }).render();
ã«ãŒãããŒãã«å¯ŸããŠã®ã¿PATTERNã¿ã°ã䜿çšãããã¹ãããããã³ãã¬ãŒããããã¯ã³ã³ãã³ããšããŠäœ¿çšãããããšã瀺ãããã«SCRããããã£ã远å ããã ãã§ããããšã«æ³šæããŠãã ããã
ã€ãŸããæ¬¡ã®ããŒã¯ã¢ããã¯ããã¿ãŒã³ãSRCã§æå®ãããã¢ãã¬ã¹ã§ãã¿ãŒã³ãæ€åºãããtextãã®å€ã«type hookã§é©çšããå¿
èŠãããããšãæå³ããŸãã
<login src="/patterns/controls/textinput/pattern.html"> <type>text</type> </login>
ããã§ã¯å®éã®äŸãèŠãããšãã§ããŸãã ããŒãžã®ãœãŒã¹ãéããŠãJavaScriptåŒã³åºãããªãããšãããã³ã¬ã³ããªã³ã°ã«å¿
èŠãªããŒã¿ãå«ãå
ã®ããŒãžã¬ã€ã¢ãŠãã«PATTERNã¿ã°ãååšããããšã確èªããŸãã
ãã¿ãŒã³ãªããŒã
éåžžã«é »ç¹ã«ãã¿ãŒã³ãç¹°ãè¿ãç¹°ãè¿ãå¿
èŠããããŸãã ããã®æãé¡èãªäŸã¯è¡šã§ãã äœæããã«ã¯ã2ã€ã®ãã³ãã¬ãŒããå¿
èŠã§ãã
ããŒãã«ãã³ãã¬ãŒãã
<table data-type="Demo.Table"> <tr> <th>{{titles.column_0}}</th> <th>{{titles.column_1}}</th> <th>{{titles.column_2}}</th> <th>{{titles.column_3}}</th> </tr> {{rows}} </table>
ãããŠãããŒãã«å
ã®è¡ãã¿ãŒã³ã
<tr> <td>{{column_0}}</td> <td>{{column_1}}</td> <td>{{column_2}}</td> <td>{{column_3}}</td> </tr>
ãããã®2ã€ã®ãã³ãã¬ãŒããšããŒã¿ãããã°ãããŒãã«ãæç»ã§ããŸãã
var data_source = []; for (var i = 0; i < 100; i += 1) { data_source.push({ column_0: (Math.random() * 1000).toFixed(4), column_1: (Math.random() * 1000).toFixed(4), column_2: (Math.random() * 1000).toFixed(4), column_3: (Math.random() * 1000).toFixed(4), }); } _patterns.get({ url: '/patterns/table/container/pattern.html', node: document.body, hooks: { titles: { column_0: 'Column #0', column_1: 'Column #1', column_2: 'Column #2', column_3: 'Column #3', }, rows: _patterns.get({ url: '/patterns/table/row/pattern.html', hooks: data_source, }) } }).render();
ããã§å®éã®äŸãèŠã€ããããšãã§ããŸãã
ãããã£ãŠãç¹å®ã®ãã¿ãŒã³ãæ°åç¹°ãè¿ãã«ã¯ãããã¯ïŒããã¯ïŒã®å€ãããŒã¿é
åãšããŠæž¡ãã ãã§ååã§ãã ãŸãããæ°ã¥ããããããŸããããHTMLã§ãã³ãã¬ãŒããå®çŸ©ãããšãã«ãã³ãã¬ãŒããç¹°ãè¿ãããã«ã以åã«æ¿èªãŠã£ã³ããŠã®ãã¿ã³ã§ç€ºããããã«ãå¿
èŠãªåæ°ã ãããã¯å€ãç¹°ãè¿ããŸãã
<controls src="/patterns/buttons/flat/pattern.html"> <id>login_button</id><title>login</title> <id>cancel_button</id><title>cancel</title> </controls>
ãŸããããããŒã®ããã¯ã®ååã¯ãã€ã³ã{{titles.column_0}}ãä»ããŠå®çŸ©ãããŠãããããã¬ã³ããªã³ã°é¢æ°ã§å€ã®ããæå³ã®ããå®çŸ©ã䜿çšã§ããŸãã ãããã£ãŠããã¹ãŠã®èŠåºãã¯titlesãªããžã§ã¯ãã§å®çŸ©ãããŸãã
ã³ã³ãããŒã©ãŒãšã³ãŒã«ããã¯é¢æ°
æ¬è³ªçã«ããã¿ãŒã³ã§ã¯ãã³ã³ãããŒã©ãŒãšã³ãŒã«ããã¯é¢æ°ã¯åããã®ã§ãã å¯äžã®éãã¯ä¿ç®¡å Žæã§ãã
ãæ³åã®ãšãããã³ãŒã«ããã¯é¢æ°ã¯ãã³ãã¬ãŒãã®ã¬ã³ããªã³ã°æã«å®çŸ©ãããŸãã
_patterns.get({ url : 'some_url', callbacks: {
ãã ããã³ã³ãããŒã©ãŒãäœæããã«ã¯ã次ã®ã³ã³ãã³ãã®JSãã¡ã€ã«ãäœæããå¿
èŠããããŸã
_controller(function (results) { var instance = this, dom = results.dom, model = results.model, binds = results.binds, map = results.map, resources = results.resources; ... });
次ã«ããã³ãã¬ãŒãã«æ·»ä»ããã ãã§ãã
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Flex.Template</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <link rel="stylesheet" type="text/css" href="pattern.css" /> <script type="text/javascript" src="conroller.js"></script> </head> <body> <div data-style="Popup"> <div data-style="Popup.Container"> <div data-style="Popup.Title"> <p data-style="Popup.Title">{{title}}</p> </div> <div data-style="Popup.Content">{{content}}</div> <div data-style="Popup.Bottom"> <p data-style="Popup.Bottom">{{bottom}}</p> </div> </div> </div> </body> </html>
ããã§ã³ã³ãããŒã©ãŒã®æºåã¯å®äºã§ãã ããã§ããã³ãã¬ãŒããæç»ãããåŸãã³ã³ãããŒã©ãŒå
ã§å®çŸ©ãããŠãããã¹ãŠã®ãã®ãæ¯åèµ·åãããŸãã
ãã ããæãè峿·±ãã®ã¯çµæãªããžã§ã¯ãã§ãããã³ã³ãããŒã©ãŒãšã³ãŒã«ããã¯é¢æ°ã®äž¡æ¹ã«æž¡ãããŸãã
ã¢ãã«ãšã³ãã¥ãã±ãŒã·ã§ã³
ååŸãã2ã€ã®éèŠãªãªããžã§ã¯ãã¯ãã¢ãã«ãšãã€ã³ãã§ã
var model = results.model; var binds = results.binds;
äœããããããšã瀺ãããã«ãããŒãã«è¡ã®ãã³ãã¬ãŒããæ¬¡ã®ããã«å€æŽããŸãã
<tr> <td style="background:{{::background_0}};">{{column_0}}{{::column_0}}</td> <td style="background:{{::background_1}};">{{column_1}}{{::column_1}}</td> <td style="background:{{::background_2}};">{{column_2}}{{::column_2}}</td> <td style="background:{{::background_3}};">{{column_3}}{{::column_3}}</td> </tr>
ã芧ã®ãšãããããã€ãã®ãªã³ã¯ã远å ããŸããã ãŸããåã»ã«ã®backgroundããããã£ãbackground_n倿°ã«ãªã³ã¯ããŸããã ã»ã«èªäœã®å€ã«ã€ããŠãåãããšãè¡ãããããã倿°column_nã«é¢é£ä»ããŸããã
ããã§ãã³ã³ãããŒã©ãŒïŒãŸãã¯ã³ãŒã«ããã¯é¢æ°ïŒã§ãããŒãã®é¢é£ããããã£ã«ã¢ã¯ã»ã¹ã§ããŸãã
_patterns.get({ ... callbacks : { success: function (results) { (function (model) { var fun = function () { var r = Math.round(19 * Math.random()), c = Math.round(3 * Math.random()); model.__rows__[r]['column_' + c] = (Math.random() * 1000).toFixed(4); model.__rows__[r]['background_' + c] = 'rgb(' + Math.round(255 * Math.random()) + ', ' + Math.round(255 * Math.random()) + ', ' + Math.round(255 * Math.random()) + ')'; setTimeout(fun, Math.ceil(50 * Math.random())); }; fun(); }(results.model)); } } }).render();
ããã§ã³ã€ã«ããé£ã°ãããããŒãã«ãèŠãããšãã§ããŸãã
ãã®ãããã¢ãã«ãªããžã§ã¯ãã«ã¯é¢é£ããå€ãžã®ãªã³ã¯ãå«ãŸããŠããŸãã __rows__ããããã£ã«æ³šæããŠãã ããã ãã®__hook__ã³ã³ã¹ãã©ã¯ãã«ãããããã¯ã®ãã¹ãã¬ãã«ã瀺ãããŸãã ããŒã¿ã¯ã«ãŒããã³ãã¬ãŒãïŒããŒãã«ãã³ãã¬ãŒãïŒã«å«ãŸããŠããããããã¯è¡ã«åã蟌ãŸããŠãããããã¢ãã«.__ rows__ãä»ããŠããŒã¿ã«ã¢ã¯ã»ã¹ã§ããŸãã ååã®ç«¶åã«å¯Ÿããäºé²çãšããŠäºéäžç·ãå°å
¥ãããŠããŸãã
èŠããŠããå Žåã¯ãæ¿èªãŠã£ã³ããŠãã³ãã¬ãŒãã§INPUT.valueãP.innerHTMLã«ãªã³ã¯ããŸããã ã³ãŒã«ããã¯é¢æ°ã§ã¯ãå€ãžã®åç
§ãååŸããŸãã
_patterns.get({ url : '/patterns/popup/pattern.html', node : document.body, hooks : { id : id, title : 'Test dialog window', content : _patterns.get({ url : '/patterns/patterns/login/pattern.html', hooks : { login : _patterns.get({ url : '/patterns/controls/textinput/pattern.html', hooks : { type: 'text', } }), password: _patterns.get({ url : '/patterns/controls/textinput/pattern.html', hooks : { type: 'password', } }), controls: _patterns.get({ url : '/patterns/buttons/flat/pattern.html', hooks : [{ title: 'login', id: 'login_button' }, { title: 'cancel', id: 'cancel_button' }] }), } }) }, callbacks: { success: function (results) { var instance = this, model = results.model; model.__content__.__login__.value = 'this new login'; } }, }).render();
ã¢ãã«ã¯æŽçãããŠããŸããããã€ã³ããšã¯äœã§ããïŒ ãŸãããã®æ§é å
ã®ãã€ã³ãã¯ã¢ãã«ãšåãã§ããã1ã€ã®äŸå€ããããŸã-ãæåŸã«ãã¯å€ã§ã¯ãªãã¡ãœããã§ãã
success: function (results) { var instance = this, dom = results.dom, binds = results.binds, id = null;
ãããŠããã®ãã¡ã®2ã€ïŒã¡ãœããïŒãããããŸããã
ãæ³åã®ãšãããæåã¯ã€ãã³ããã³ãã©ãŒãã¢ã¿ãããã2çªç®ã¯ã€ãã³ããã³ãã©ãŒãåé€ããŸãã ãããã£ãŠãã¢ãã«ã®äžéšã®ããããã£ã«é¢æ°ãããã³ã°ããããããšãã§ãããã®ããããã£ã倿Žããããã³ã«ããªã¬ãŒãããŸãã
DOMãšããã
ä»ã®2ã€ã®è峿·±ããªããžã§ã¯ãã¯ãDOMãšãããã§ãã
var dom = results.dom; var map = results.map;
æ¿èªãŠã£ã³ããŠã®ãã¿ã³ãã³ãã¬ãŒããå°ã倿ŽããŠãdomãªããžã§ã¯ãã®æ©èœã瀺ããŸãã
<a data-type="Buttons.Flat" id="{{id}}" {{$button}}>{{title}}</a>
ããã§ããã¿ã³ããŒãã«ãªã³ã¯{{$ button}}ã远å ããŸããã ãããã£ãŠããã®ããŒããæäœããããã®ã¡ãœããã®ã³ã¬ã¯ã·ã§ã³ãäœæãããã¿ãŒã³ã«é¢é£ããããŒãã«æ³šç®ããŸããã
success: function (results) { var instance = this, dom = results.dom; dom.listed.__content__.__controls__[0].button.on('click', function () { alert('You cannot login. It\'s just test. Login is "' + model.__content__.__login__.value + '", and password is "' + model.__content__.__password__.value + '"'); }); dom.listed.__content__.__controls__[1].button.on('click', function () { alert('Do not close me, please.'); }); dom.grouped.__content__.__controls__.button.on('click', function () { alert('This is common handle for both buttons'); }); }
ã芧ã®ãšããããã©ãŒã ã®ãã¿ã³ã«ã€ãã³ããã³ãã©ãŒãã¢ã¿ããããæ©äŒããããŸããã ããã«äœ¿çšã§ãããã¹ãŠã®ã¡ãœããã®å®å
šãªãªã¹ãã¯ã
ããã«ãããŸã ã ç¬èªã®ã¡ãœããã远å ããæ¹æ³ã®èª¬æããããŸãã
ããã§ã¯ãdomãªããžã§ã¯ãã«2ã€ã®ããããã£ãããããšã«æ³šç®ããŠãã ããã
æåã®ããããã£ã«ã¯ã°ã«ãŒãåãããã¡ãœãããå«ãŸããŸãã ã€ãŸãããã©ãŒã ã«2ã€ã®ãã¿ã³ããããããããšãã°onã¡ãœããã«ã¢ã¯ã»ã¹ããïŒã€ãã³ããã¢ã¿ããããïŒãšãã«ãã€ãã³ããäžåºŠã«2ã€ã®ãã¿ã³ã«ã¢ã¿ããããŸãã åã
ã®ãã¿ã³ã«ã¢ã¯ã»ã¹ããå¿
èŠãããå Žåã¯ããªã¹ããããŠããããããã£ã䜿çšããå¿
èŠããããŸãã
次ã«ãããããªããžã§ã¯ãã䜿çšãããšããã³ãã¬ãŒããŸãã¯ãã®ããŒãã®ã³ã³ããã¹ãã«æ€çŽ¢ãå¶éããããããããŒãããã°ããæ€çŽ¢ã§ããŸãã
success: function (results) { var instance = this, map = results.map, nodes = null;
ã€ãŸããmap.content.login .__ context.selectïŒ 'p'ïŒã¯ããã°ã€ã³ã瀺ãããã«å®çŸ©ãããããã¹ããã£ãŒã«ããã³ãã¬ãŒãã«é¢é£ãããã³ãã¬ãŒãã®éšåå
ã§ã®ã¿ãã¹ãŠã®æ®µèœãæ€çŽ¢ããŸãã
ããããªããžã§ã¯ãã䜿çšããŠãããŒãããã°ããæ€çŽ¢ããããŒããžã®ãªã³ã¯ãååŸã§ããŸãã
ããŒã¿äº€æ
æåŸã«ãã³ãŒã«ããã¯é¢æ°ã«æž¡ãããæåŸã®ãªããžã§ã¯ãã¯ãªãœãŒã¹ã§ãã ãã¹ãŠãã·ã³ãã«ã§ã-ããã¯ããŒã¿äº€æã¡ã«ããºã ã§ãã ãã®ããããã³ãã¬ãŒããã¬ã³ããªã³ã°ãããšãã«ãresourcesããããã£ãå®çŸ©ã§ããŸãã
_patterns.get({ url : '/patterns/popup/pattern.html', node : document.body, hooks : { id : id, title : 'Test dialog window', content : _patterns.get({ url : '/patterns/login/pattern.html', hooks : { login : _patterns.get({ url : '/patterns/controls/textinput/pattern.html', hooks : { type: 'text', } }), password: _patterns.get({ url : '/patterns/controls/textinput/pattern.html', hooks : { type: 'password', } }), controls: _patterns.get({ url : '/patterns/buttons/flat/pattern.html', hooks : [{ title: 'login', id: 'login_button' }, { title: 'cancel', id: 'cancel_button' }] }), }, }) }, resources: { field1 : 'one', field2 : 'two' }, callbacks: { success: function (results) { var instance = this, resources = results.resources; window.console.log(resources.field1); window.console.log(resources.field2);
äŸã§ç€ºãããã«ãã³ãŒã«ããã¯é¢æ°ã«æž¡ãããŸãã ãããã£ãŠãã¬ã³ããªã³ã°ã®ååŸã«ããŒã¿ã亀æããæ©äŒãåŸãããŸãã
çšèªãŸãã¯å€åãããã¿ãŒã³
å®éãããã¯ãã¿ãŒã³ã®æãè峿·±ãéšåã§ãïŒãã¡ãããç§ã®èгç¹ããïŒãããã§ææ¡ãããŠããã¢ãããŒãã¯å°ãå°æãããããããŸããã ãããããŸãæåã«ã
ãããã£ãŠãåªãããã³ãã¬ãŒãã¯å®å
šã«éçã§ãããšã¯éãããã¬ã³ããªã³ã°ã«äœ¿çšããããŒã¿ã«å¿ããŠäœããã®åœ¢ã§å€æŽããå¿
èŠããããŸãã ãã®ç®çã®ããã®ãã³ãã¬ãŒããšã³ãžã³ã®å€§åã¯ãæ§æââãçµã¿åãããŠäœ¿çšââããããžãã¯ãããŒã¯ã¢ããã«çŽæ¥æ¿å
¥ããŸãã ããã¯ãããšãã°ãèšäºã®åé ã§èšåããAJSã«ãã£ãŠè¡ãããŸãã
<ul> <% for(var i=0; i<supplies.length; i++) {%> <li><%= supplies[i] %></li> <% } %> </ul>
ãã¿ãŒã³ããã®ãããªåé¡ãã©ã®ããã«è§£æ±ºãããã瀺ãããã«ãèªèšŒãŠã£ã³ããŠã®äŸã«æ»ããããã¹ããã£ãŒã«ããã³ãã¬ãŒãã倿ŽããŠããã¹ã¯ãŒãã«äœ¿çšãããå Žåã«æå¹ãªæåããŠãŒã¶ãŒã«è¡šç€ºãããããã«ããŸãã
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Flex.Template</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <link rel="stylesheet" type="text/css" href="pattern.css" /> <script type="text/javascript" src="conditions.js"></script> </head> <body> <p>{{::value}}</p> <div data-type="TextInput.Wrapper"> <div data-type="TextInput.Container"> <input data-type="TextInput" type="{{type}}" value="{{::value}}" name="TestInput" {{$input}}/> </div> <div data-type="TextInput.Info.Icon"></div> <div data-type="TextInput.Info.Popup"> <p>You can use in password only letters, number and _</p> </div> </div> </body> </html>
ã芧ã®ãšãããæ¬¡ã®æ°ããããŒã¯ã¢ããã远å ããŸããã
<div data-type="TextInput.Info.Icon"></div> <div data-type="TextInput.Info.Popup"> <p>You can use in password only letters, number and _</p> </div>
ãã®ããã«ããŠãHTMLã³ã¡ã³ãã®ããŒã¯ã¢ããã®å¿
èŠãªéšåããã¬ãŒãã³ã°ããããšã«ãããæ¡ä»¶ãå®çŸ©ã§ããŸãã
ãŸããæ·»ä»ã®JSãã¡ã€ã«ïŒconditions.jsïŒã«æ°ã¥ããã«ã¯ããããŸããã ãã®å
å®¹ã¯æ¬¡ã®ãšããã§ãã
_conditions({ type: function (data) { return data.type; } });
ã芧ã®ãšãããããŒã¯ã¢ããå
ã®æ¡ä»¶ã®ååã«å¯Ÿå¿ãã颿°ïŒã¿ã€ãïŒãå®çŸ©ãããŠããŸãã
ã§ã¯ãæŽæ°ãããæ¿èªãŠã£ã³ããŠãã³ãã¬ãŒããã¬ã³ããªã³ã°ããåŸã¯ã©ããªããŸããïŒ ãã¿ãŒã³ã¢ã¯ã·ã§ã³ã®ããžãã¯ã¯éåžžã«åçŽã§ããããã¹ããã£ãŒã«ããã³ãã¬ãŒãã§æ¡ä»¶ãçºèŠãããšããã¿ãŒã³ã¯ïŒé¢æ°åã§ïŒå颿°ãèŠã€ããããšããŸãã ãã®é¢æ°ãæ€åºãããšããã¿ãŒã³ã¯ããã¯å€ãæž¡ããŸãïŒé¢æ°ã®åŒæ°ã¯ããŒã¿ã§ãïŒã ãã®é¢æ°ãæ¡ä»¶ã§æå®ããããã¹ã¯ãŒããè¿ãå ŽåãããŒã¯ã¢ããã®è¿œå éšåããã³ãã¬ãŒãã«å«ãŸããŸãã
æŽæ°ããããã°ã€ã³ãŠã£ã³ããŠã®åäœäŸã次ã«ç€ºããŸãã
ããã«ããã³ãã¬ãŒãã«æ·»ä»ãããå¥ã®ãã¡ã€ã«ã ãã§ãªããã¬ã³ããªã³ã°äžã«æ¡ä»¶ã決å®ã§ããŸãã
_patterns.get({ url : '/patterns/popup/pattern.html', node : document.body, hooks : { id : id, title : 'Test dialog window', content : _patterns.get({ url : '/patterns/login/pattern.html', hooks : { login : _patterns.get({ url : '/patterns/controls/textinput/pattern.html', hooks : { type: 'text', }, conditions : { type: function (data) { return data.type; } }, }), password: _patterns.get({ url : '/patterns/controls/textinput/pattern.html', hooks : { type: 'password', }, conditions : { type: function (data) { return data.type; } }, }), controls: _patterns.get({ url : '/patterns/buttons/flat/pattern.html', hooks : [{ title: 'login', id: 'login_button' }, { title: 'cancel', id: 'cancel_button' }] }), }, }) }, }).render();
ããããä»ã話ãããã®ã¯ããã³ãã¬ãŒãå
ã®æ¡ä»¶ãäœããã®åœ¢ã§
ãå°»ãä»ããŠå®è£
ãã
ãŠããããšã§ãã æ¥ããªãã§ãã ããã 2ã€ã®é倧ãªåæ©ããããŸãã
- æåã«ãããã©ã«ãã®æ¡ä»¶ïŒå¥ã®JSãšããŠãã³ãã¬ãŒãã«ã¢ã¿ãããããŠãããã®ïŒããããããã¬ã³ããªã³ã°é¢æ°ãä»ããŠãã³ãã¬ãŒãã«ã¢ã¯ã»ã¹ããããšãªãããããã®æ¡ä»¶ããªãŒããŒã©ã€ãã§ããŸãïŒäžèšãåç
§ïŒã ãããã£ãŠãçŸåšã®ããŒãºã«åãããŠããžãã¯ãåžžã«ãä¿®æ£ãã§ããã®ã§ãããªãç°ãªãã³ã³ããŒãã³ãã®æãäœæããå¿
èŠã¯ãããŸããã
- 第äºã«ããããç§ã«ãšã£ãŠã®äž»èŠãªããšã§ã-å
¥åããŒã¿ã倿Žãããå Žåããã³ãã¬ãŒãããã°ããåæ§ç¯ããæ©äŒããããŸãã ããæç¢ºã«ãªãã®ã¯ãéåžžã®ãã³ãã¬ãŒããšã³ãžã³ãæ¡ä»¶ãåæããããŒã¯ã¢ããã«ããŠã³ããããæçµçãªãã³ãã¬ãŒããäœæããããšã§ãã ããŒã¿ã倿Žãããå Žåã¯ãã¬ã³ããªã³ã°ãããã€ã³ã¹ã¿ã³ã¹ãåé€ããŠããã³ãã¬ãŒããåæ§ç¯ããå¿
èŠããããŸãã 颿°æ¡ä»¶ã䜿çšããã¢ãããŒãã«ããããã®é«äŸ¡ãªæäœãããã«ãæ¡ä»¶ã«é¢é£ãããã³ãã¬ãŒãã®å°ããªéšåã®ã¿ãåæ§ç¯ã§ããŸãã
ãäºçªç®ã«ããããããçè§£ããããã«ãããŒãã«ã®è¡ãã¿ãŒã³ã倿ŽããŸãããã
<tr> <td>{{column_0}}{{::column_0}}</td> <td>{{column_1}}{{::column_1}}</td> <td>{{column_2}}{{::column_2}}</td> <td> <div> <p>{{column_3}}{{::column_3}}</p> <p>This value is less than 111</p> <p>This value is more than 111 and less than 222</p> <p>This value is more than 222 and less than 333</p> <p>This value is more than 333 and less than 666</p> <p>This value is more than 666 and less than 1000</p> </div> </td> </tr>
ãã¹ãŠãããªãããŒã«èŠããŸãããïŒ
ããããæ©èœæ¡ä»¶ãèŠããšããã¹ãŠãæããã«ãªããŸãã var conditions = { value_sets: function (data) { if (data.column_3 <= 333 ) { return '0'; } if (data.column_3 > 333 && data.column_3 <= 666 ) { return '0.5'; } if (data.column_3 > 666 ) { return '1'; } }, sub_value_sets: function (data) { if (data.column_3 <= 111 ) { return '0'; } if (data.column_3 > 111 && data.column_3 <= 222 ) { return '0.5'; } if (data.column_3 > 222 ) { return '1'; } }, }; conditions.value_sets. tracking = ['column_3']; conditions.sub_value_sets. tracking = ['column_0']; _conditions(conditions);
å®éããã¹ãŠã¯åçŽã§ããåè¡ã®4çªç®ã®ã»ã«ã«åé¡ãããçªå·ã«å¿ããŠããã®è¡ã®çœ²åãå€ãããŸãããã©ããã³ã°ããããã£ãéããŠããã³ãã¬ãŒããæŽæ°ããããã«å¿
èŠãªããŒã¿ã倿Žãããšãã«ãã¿ãŒã³ã衚瀺ããŸãããã®å Žåãæ¡ä»¶ãåè¡ã®æåãšæåŸã®ã»ã«ã®å€ã«é¢é£ä»ããŸããããã€ããã¯ã¹ã远å ããŠã¬ã³ããªã³ã°ãå®è¡ããŸãããã var data_source = []; for (var i = 0; i < 100; i += 1) { data_source.push({ column_0: (Math.random() * 1000).toFixed(4), column_1: (Math.random() * 1000).toFixed(4), column_2: (Math.random() * 1000).toFixed(4), column_3: (Math.random() * 1000).toFixed(4), }); } _patterns.get({ url : '/patterns/table/container/pattern.html', node : document.body, hooks : { titles : { column_0: 'Column #0', column_1: 'Column #1', column_2: 'Column #2', column_3: 'Column #3', }, rows : _patterns.get({ url: '/patterns/table/row_con/pattern.html', hooks: data_source, }) }, callbacks : { success: function (results) { (function (model) { var fun = function () { var r = Math.round(99 * Math.random()), c = Math.round(3 * Math.random()); model.__rows__[r]['column_' + c] = (Math.random() * 1000).toFixed(4); setTimeout(fun, Math.ceil(50 * Math.random())); }; fun(); }(results.model)); } } }).render();
ãããã£ãŠãã芧ã®ãšããã50ããªç§ããšã§ããã»ã«ã®å€ã倿ŽããŸãããŸããæåãŸãã¯æåŸã®ãã³ãã¬ãŒãã倿Žãããå Žåãä»ã®å€ãã®ãã³ãã¬ãŒããšã³ãžã³ãè¡ãããã«ïŒå®å
šã«ã§ã¯ãªãïŒãå¿
èŠãªéšåã§åæç»ãããŸãããã®äžåèªã®å®äŸã¯ããã§èŠã€ããããšãã§ããŸããå®äºãã代ããã«
å®éã説æã§ããç¹ã¯ãŸã ãããããããŸãããç§ã¯ãã§ã«ããªãã®å¿èã®éçãã¯ããã«è¶
ããŠããã®ã§ã¯ãªãããšå¿é
ããŠããŸãããã¿ãŒã³ã®äž»ãªå©ç¹ã¯æ¬¡ã®ãšããã§ãã- ãã³ãã¬ãŒãã¯åãªãHTMLã§ãããéæšæºã®æ§æã¯äœ¿çšãããŠããªãããããã³ãã¬ãŒãã¯ããŒãžãšã¯å¥ã«å®è¡ããŠãããã°ã§ããŸãã
- æ¡ä»¶ã«å¯Ÿããéæšæºçãªã¢ãããŒãã®ãããã§ããã³ãã¬ãŒããåèµ·åããã«éšåçã«ãåæ§ç¯ãã§ããŸãã
- ãã«ãã€ã³ãã£ãã·ã³ã°ã·ã¹ãã ã®ãããã§ããã³ãã¬ãŒãå
šäœïŒãªãœãŒã¹ãå«ãïŒãã¯ã©ã€ã¢ã³ãåŽã«ä¿åããããã©ãã£ãã¯ã®è² è·ã軜æžãããŸãã
ãããããããã¯ç§ã«ãšã£ãŠã®ã¿ã®äž»ãªå©ç¹ã§ããããªãã«ãšã£ãŠã¯ããããã¯ç°ãªã£ãŠããããæ¬ ããŠããããããããããŸãããããã§ã¯ããã¿ãŒã³ã«é¢é£ãããã¹ãŠã®è©³çްãªèª¬æãèŠã€ããããšãã§ããŸãããã㯠github ã®ãããžã§ã¯ãããŒãžã§ãããæž
èŽããããšãããããŸããã