ããŒãã«ã®å€ã§ã¯ãåããã³ãã«ããŒ#eachãæåããããšã«æ³šæããŠãã ããã ç§ã®jsfiddleã«ã¯ãããã瀺ã2ã€ã®å¢çä»ãåºåãå«ãŸããŠããŸãã
䟡å€ãããã®ã¯ã{{each}}ã¿ã°ãããŒãã«ã®å€ã«é 眮ãããŠããå Žåãä»ã®ã¿ã°ãæ©èœããããšã§ãã ãã¡ãããããã¯ããŒãã«ãç¹°ãè¿ãè€è£œããå Žåã«æãŸãããªã圱é¿ãåãŒããŸãããããããåé¡ãçµã蟌ãã®ã«åœ¹ç«ã¡ãŸãã
ããã¯jQueryãªã©ã®åé¡ã®ããã§ã... console.log(frag);
å®è¡ãããšããã³ãã«ããŒã§ã³ã³ãã€ã«ããããšããåã§ãã {{#each}}
ãã«ããŒãããŒãã«ã®å€ã«ããã·ã¥ãããŠããããšãããããŸãã ..ãã
ãã³ãã¬ãŒãã<script type="text/x-handlebars-template"></script>
ã¿ã°å
ã«é
眮ããããã«jsfiddleãæŽæ°ããŸããããæ£åžžã«æ©èœããŠããããã§ã...
ãããç§ã¯ã¡ããã©èªåèªèº«ãçºèŠããŸããïŒ
http://jsfiddle.net/cwYhN/10/
䟡å€ãããã®ã¯ãjqueryã®æ¬ é¥ã§ã¯ãªãããã©ãŠã¶ãç¡å¹ãªhtmlãšèŠãªããã®ãç Žæ£ããŠããããšã ãšæããŸãã
ããããããjQueryã®ãã®ãªã®ããjQueryãåŒã³åºããã€ãã£ããã©ãŠã¶é¢æ°ãªã®ãã¯ããããŸããã§ããã ãããã«ããã tbody
ãštr
éã®{{ }}
ã¯å¥œãã§ã¯ãããŸããã
ãã³ãã«ããŒããã®å¶çŽå ã§åäœããããã«äœããã®æ¹æ³ã§æ§ç¯ãããŠãããšäŸ¿å©ã§ãã ããšãã°ãã¿ã°ã®å 容ãå埩åŠçããããšãæé»çã«ç解ããªãããã¿ã°å ã«ãeachããé 眮ã§ããããšã ç§ã¯ããã次ã®ããã«èŠãããšæ³åãããããããŸããïŒ
<table>
<tbody handlebars="{{each}}">
... these get iterated ...
</tbody>
</table>
ãã®ãããªããšãèš±å¯ãããšããã©ãŠã¶ãŒãéèŠãªåã¹ããŒãã¡ã³ããåé€ããã®ãé²ãããããå±ããçµäºã¿ã°ïŒ/ tbodyïŒã«äŸ¿ä¹ããå¯èœæ§ããããŸãã
çããããã§ã«ã»ã®ããããŠããããã«ãHTMLããŒãµãŒã¯ãã³ãã«ããŒã®ããŒã¯ã¢ããã«ãã£ãŠæ··ä¹±ãããã³ãã«ããŒãã³ãã¬ãŒãã«å€æããããšããDOMæ§é ãšããŠãããæãä»ããŸãã
{{#each activity}}
{{/each}}
<table style="border:1px solid #ccc;">
<thead>
<tr><th>Month</th>
<th>Imps</th>
<th>Clicks</th>
<th>Spend</th>
</tr></thead>
<tbody><tr>
<th>{{month}}</th>
<td>{{impressions}}</td><td>{{clicks}}</td><td>{{spend}}</td>
</tr></tbody>
</table>
ãããåé¿ããã«ã¯ãäžèšã®ã¹ã¯ãªããã®åäœãJavaScriptæååããŸãã¯ããªã³ã³ãã€ã«ãªã©ã䜿çšããå¿ èŠããããŸãã
ãã®åé¡ã¯ãã³ãã«ããŒèªäœã®ãã°ãšããããããã©ãŠã¶ã®å®è£ ã®è©³çŽ°ã§ããããããããç· ãããããŸãã
{{#each}}ãããŒãã«ã§æ©èœããªãããšããããåã«ãã¡ããã©åæ¥ç¡é§ã«ãªããŸããã ãããåã«ããã¥ã¡ã³ãã«èšèŒãããŠããã°ãæ¬åœã«åœ¹ã«ç«ã¡ãŸãã
é©åã«ããŒããããŠããã°ããããããããŒãã«ã§å®å šã«æ£åžžã«æ©èœããŸãã ãã³ãã¬ãŒããã©ã®ããã«ããŒãããŠããŸããïŒ
@preicheltãã©ãŠã¶ãããŒãã«ã®{{#each}}ãå°ç¡ãã«ããªãããã«ãã¹ã¯ãªããã¿ã°å ãããã³ãã«ããŒãããŒãããå¿ èŠããããŸãã ããªãã¯ã¹ã¿ãã¯ãªãŒããŒãããŒã«ã€ããŠãã£ãšèªãããšãã§ããŸãïŒ
http://stackoverflow.com/questions/15386276/why-should-we-wrap-our-templates-inside-script-blocks
ãã®ãã°ã¯ç§ã®äººçã®2æéç¡é§ã«ãªããçŸåšã¯åææ¥ã®ååŸ10æ30åã§ãããã®åé¡ãš[Official Block Doc]ãèŠã€ãããŸã§ããã®ãã°ã解決ããããã ãã«ãªãã£ã¹ã§åããŠããŸãã
ïŒhttp://handlebarsjs.com/builtin_helpers.htmlïŒã¯ããã«ã€ããŠäœãè¿°ã¹ãŠããŸããã
æ確ã§ãªãå Žåãããã¯ãã³ãã«ããŒã®ããã§ã¯ãããŸããããHTMLãã©ã®ããã«æ©èœããããç¥ããªãã®ã¯ããªãã®ããhttps ïŒ//html.spec.whatwg.org/multipage/syntax.html#an -introduction-to-error -ããŒãµãŒå ã®åŠçãšå¥åŠãªã±ãŒã¹
ããã§ãHandlebarsjsã䜿ãããšãããã¹ãŠã®äººããHTMLããŒãµãŒãã©ã®ããã«æ©èœããããããç解ããŠããå¿ èŠããããšæããŸããïŒ ããã§ãªãå Žåãããã¯_ãŠãŒã¶ãŒã®ãã_ã§ãããããã¥ã¡ã³ãã®æ確ãã®ããã§ã¯ãããŸãããïŒ ãã®ä»®å®ã¯æå³ããããŸããã ãã1ã€ã®éããŠè€éãªãã³ãã¬ãŒããšã³ãžã³ã§ããAngularjsã¯ããã³ãã¬ãŒãæ§æãšããŠHtmläºæã®æ§æã䜿çšããŸããããšãã°ãããŒãã«ãã«ãŒãããå¿ èŠãããå Žåã¯ã次ã䜿çšã§ããŸãã
<tr ng-repeat="dto in tableData">
ãŸããAngularjsã¯ãHtmlã³ã¡ã³ãã䜿çšããŠã«ãŒãã®å éšã¹ããŒã¿ã¹ãä¿æããŸãã
<!-- ngRepeat: column in row -->
<tr ng-repeat="dto in tableData">
Angualrjsã¯ãå¯èœãªéãHtmlã®æ§æãå°éããŠåŸãããšãããã®ä»®å®ãããŸãåé¿ããããšããŸãã ãã ããHandlebarsjsã®ãã³ãã¬ãŒãæ§æã¯ããã§ã¯ãªããããHtmlããŒãµãŒã®åé¡ããŠãŒã¶ãŒã«å
¬éãããŸãã
éçºè
ãããªãã®åŽã§åé¡ã解決ã§ããªãå Žåãããªããããªãã®ãããžã§ã¯ããšäžçäžã®ãŠãŒã¶ãŒãæ¬åœã«æ°ã«ãããŠãããªããããªãã¯ããªãã®ãŠãŒã¶ãŒã«åé¡ãèªèããããã«äŒãã_矩å_ãæã£ãŠããŸãã
ãšã«ãããç§ã¯ããã¥ã¡ã³ãã®åé¡ãéããŸãããªããªããç§ã¯ãã®é çã®åé¡ã«ééããæåã®äººã§ã¯ãªããæåŸã®åé¡ã§ã¯ãªããšä¿¡ããŠããããã§ãã _
Angularã¯DOMã§å®è¡ããããããDOMãèªèããŸãã ãã³ãã«ããŒã¯æååã§ã®ã¿æ©èœããDOMã®æŠå¿µã¯ãããŸããã
@profullstack ïŒ @stevenvachonãèšã£ãããã«ããã³ãã«ããŒã¯HTMLã§ã¯æ©èœãããããã¹ãã§ã®ã¿æ©èœããŸãã ãã ãããã¹ãŠã®äŸãHTMLã§ãããããããã¯ããã¥ã¡ã³ãããã¯æããã§ã¯ãªãå ŽåããããŸãã å人çã«ã¯ããŒã¯ããŠã³ãçæããããã«ã䜿çšããŸã...
ããã¥ã¡ã³ãã«ã©ã®ãããªããã¹ããå¿
èŠãæããŠããã ããã°ãåãã§è¿œå ãããŠããã ããŸãã ãã ããäžè¬çãªäœ¿çšæ¹æ³ïŒ <script>
ã¿ã°ã®ä»ããéšåãå«ãïŒã¯ã httpïŒ //handlebarsjs.com/ã®ã¡ã€ã³ããŒãžã«æ¢ã«ãããŸã
@profullstack ãæéã®ç¡é§ãã«äžæºãæããŠããããã§ãããç§ã®æèŠã§ã¯ãããã¯å®å šã«éè¡ããŠããŸãã
ãªãŒãã³ãœãŒã¹ãããžã§ã¯ããå¯çš¿è ã¯ããªãã«å¯ŸããŠãããªã矩åãè² ããŸããã ãã³ãã«ããŒã®ãããªããŒã«ã¯ãä»ã®éçºè ã®ç掻ã楜ã«ããããã«ãç¡æã§ã»ãšãã©æè¬ããã«äœæããã³ä¿å®ãããŠããŸãã ãªãŒãã³ãœãŒã¹ãããžã§ã¯ãããŸã£ãã䜿çšã§ããªãã£ããšããããã©ã®ãããã®æéãããããŸãããïŒ
ãã®ãããªå£èª¿ã§ã³ã¡ã³ããæžããŠã¿ããšãæåŸ ããå¹æãšã¯
@ErisDSã¢ããã€ã¹ããããšãããããŸãã ç§ã®æåã®ã³ã¡ã³ãã¯åŒ·ããããããããŸããããç§ã¯ããªãã®æèŠã«å®å šã«åæããŸãïŒ
to try to making other developers lives easier
ãããŠããªãAngularjsãåé€ããŠHandlebarsjsã䜿çšããã®ã§ããïŒ _Handlebarsjsã¯Angularjsãããç§ã®ç掻ã楜ã«ããŠããããšä¿¡ããŠããããã§ãã_
ããã§ãæœåšçãªåé¡ãåé¿ããããã«äœåãã®ãªãŒãã³ãœãŒã¹ãŠãŒã¶ãŒããä»ã®éçºè
ã®ç掻ã楜ã«ããããšããããªãã®æå¿ã«åããã®ãå©ããããã«ãããã¥ã¡ã³ãã«ããã€ãã®éç¥èªã芪åã«è¿œå ããŠãã ããã ããããéããŸãã
ã«ãšã£ãŠïŒ
No open source project nor contributor has any duty to you.
ã¯ããããã¯æ¬åœã ã ãªãŒãã³ãœãŒã¹ãããžã§ã¯ããéå§ããŠããããããããããšãã§ããŸãããŸã£ããåé¡ãããŸããã ãããããããžã§ã¯ããæé·ãããšããããžã§ã¯ãã«ããå€ãã®æéãšå¿ãè²»ããããããžã§ã¯ããããæããäžçãšå
±æããããšæãããã«ãªããŸãã ãã®æç¹ã§ã_ãŠãŒã¶ãŒã®ããšãæ°ã«ãã_ãš_ããã¥ã¡ã³ãã®ããšãæ°ã«ãã_ããšããå§ããŸãã Handlebarsjsã¯ãã®æ®µéã«ãããããã¯å°ããªãããžã§ã¯ãã§ã¯ãªãã人æ°ã®ãããããžã§ã¯ãã§ãããéåœãäžåœãªã©ãäžçäžã®ããã°ã©ããŒã«ãã£ãŠäœ¿çšãããŠããŸãã
ç§ã®ç¥ãéããGithubã®ã»ãšãã©ã®ãªãŒãã³ãœãŒã¹ããã°ã©ããŒã¯ããããžã§ã¯ããšREADME.mdãã¡ã€ã«ãèªãã«æã£ãŠãããããå€ãã®äººã
ãããŒã«ãšã³ãŒãã䜿çšããããšãæãã§ããŸãã
ãããã£ãŠã次ã®å ŽåïŒ
@nknappãè¿äºããããšãããããŸãã
ãã¶ãç§ã®æåã®ã³ã¡ã³ãã¯åŒ·ãããã®ã§ããããšç§ã®ã³ã¡ã³ããèªãã 人ã
ã«è¬çœªããŸãã
äžèŠãããšããããã³ãã«ããŒã¯_ããã¹ã眮æããŒã«_ã®ããã«æ©èœããéåžžã«ç解ãããããã®ã§ãã ã ããç§ããã®ãããªãã®ãæžããšãïŒ
{{#each myListData}}
<tr>{{name}}</tr>
{{/each}}
ãããåãªã亀æã§ããå Žåãç§ã¯æ¬¡ã®ãããªãã®ãæåŸ ããŸãïŒ
<tr>nameA</tr>
<tr>nameB</tr>
ããããHTMLã«åºãããããšããããã¯å¥ã®åäœãããŸããããã¯ã @ stevenvachonã芪åã«è¿°ã¹ãããã«HTMLããŒãµãŒã®
ãããã£ãŠããåãããã¯ãã«ããŒãã»ã¯ã·ã§ã³ã®äžã«ã¯1æã ãã§ååã ãšæããŸãã
WARNING: please use script block when you try to use #each block inside table, due to the know issue of [How HTML parse works(thanks for <strong i="18">@stevenvachon</strong>'s reference](https://html.spec.whatwg.org/multipage/syntax.html#an-introduction-to-error-handling-and-strange-cases-in-the-parser)
ãæèŠããèããããã ããã°å¹žãã§ãã ããããšãã
åé¡ã¯ãããã¯#each
ãã«ããŒãšã¯äœã®é¢ä¿ããªããšããããšã§ãã ãã³ãã¬ãŒããçŽæ¥HTMLã«èšè¿°ããªãã§ãã ããã ãã®ãããªã¹ããŒãã¡ã³ãã¯ã¡ã€ã³ããŒãžã«ããã¯ãã§ããã質åã¯æ¬¡ã®ãšããã§ããããã§èªãã ã§ããããã
ãã¶ããã©ã³ãã£ã³ã°ããŒãžã®äŸã®äžã«ããªãã®ãããªèŠåãåºãããšãã§ããŸã...
ã¡ããã©å¥ã®æ³šæïŒ
æ¬çªç°å¢ã§ã¯script-blocksã¡ãœããã䜿çšããŸããã 代ããã«ãWebpackãŸãã¯å¥ã®ããŒã«ã䜿çšããŠãã³ãã¬ãŒããããªã³ã³ãã€ã«ããŸãã
@nknappã¯ããããªãã®æèŠã¯æ£ãããšæããŸãããã³ãã¬ãŒããHTMLã«çŽæ¥æžã蟌ãããšã¯çµ¶å¯Ÿã«ããªãã§ãã ããã ãããã£ãŠãã©ã³ãã£ã³ã°ããŒãžã§ã¯ãæåã®ãã¯ããã«ãã»ã¯ã·ã§ã³ã§äŸãšããŠã¹ã¯ãªããã䜿çšããå¿ èŠãããã以äžã®ç°è²ã®ãããã¯ã§å€æŽã§ããŸãã
You **can** deliver a template to the browser by including it in a <script> tag.
ã«
You **should always** deliver a template to the browser by including it in a <script> tag.
ç§ã¯ããªãã®ææ¡ãæšæž¬ããŸãïŒ
**never** write a template directly into HTML
ã¯å®å šã«æ£ããã®ã§ãã©ã³ãã£ã³ã°ããŒãžã«é 眮ããŠãå šå¡ãããã«åŸãããšãã§ããããã«ããå¿ èŠããããŸããããã«ãããå€ãã®åé¡ãåé¿ã§ããŸãã ããèãã ãšæããŸãããããæããŸããïŒ
ãããã圌ãã¯ããã次ã®ããã«ç解ãããããããªãã®ã§ããã®èª¬æã¯æ©èœããŸããïŒ
<script type="text/x-handlebars">
{{#each list as |item|}}
<td>{{item}}</td>
{{/each}}
</script>
@stevenvachonã¯ããã¹ã¯ãªããå ã«ãã³ãã¬ãŒããé 眮ããã ãã§ã¯äžååã§ãããã³ãã¬ãŒãã®æ£ãã䜿çšæ¹æ³ã«é¢ããã¡ã¢ãè¿œå ããå¿ èŠããããããããŸãããããã«ã€ããŠã®ææ¡ããèãããã ããã
å€åïŒ
ã»ãšãã©ã®æ¬çªã¢ããªã±ãŒã·ã§ã³ã§ã¯ãããŒãµãŒãšæååã®ãã³ãã¬ãŒãã䜿çšããããªãã§ãããã ããªã³ã³ãã€ã«ã調ã¹ãŠãã ããã
@stevenvachonã³ã¡ã³ãããããšãããããŸããHTMLããŒãµãŒãªã³ã¯ãã³ã¡ã³ããšäžç·ã«é 眮ãããšãããšæããŸãã
ã»ãšãã©ã®æ¬çªã¢ããªã±ãŒã·ã§ã³ã§ã¯ãããŒãµãŒãšæååã®ãã³ãã¬ãŒãã䜿çšããããªãã§ãããã ããªã³ã³ãã€ã«ã調ã¹ãŠãã ããã ãã³ãã¬ãŒããHTMLã«çŽæ¥äœ¿çšããå Žåãããã€ãã®æ¢ç¥ã®åé¡ããããŸããããšãã°ã HTMLããŒãµãŒã®åäœãåå ã§ãïŒeachãããã¯ãã«ããŒãããŒãã«å ã§æ©èœããŸãã
ããããåå²ããå¿ èŠããããŸã
<script>
ã¿ã°ã®äŸã®ããäžãã³ãã¬ãŒãã
<script>
ã¿ã°å ã«é 眮ããããšãéèŠã§ãã HTMLã«çŽæ¥å ¥ããªãã§ãã ãããHTMLããŒãµãŒãå€æŽããå¯èœæ§ããããŸãïŒããšãã°ãããŒãã«ãå«ãŸããŠããå ŽåïŒã
ãã®ã¢ãããŒãã¯ãå®çšŒåã¢ããªã±ãŒã·ã§ã³ã«ã¯æšå¥šãããªãããšã«æ³šæããŠãã ããã ãã³ãã¬ãŒããããªã³ã³ãã€ã«ããããšãå¯èœã§ãã [...]
å®éãç§ã¯å人çã«ãã©ãŠã¶ã§ãã³ãã«ããŒã䜿çšããªããªããŸãããä»ã«ãå€ãã®ãã¬ãŒã ã¯ãŒã¯ããããŸãïŒAngularãšReactã ãã§ãªããVueãšRactiveãïŒã ãã®ãããªã¯ããªãã¯ãŒã«ã§ãåé¡ã瀺ããŠããŸã...
ç§ã¯ãµãŒããŒäžã§éçããŒãžãžã§ãã¬ãŒã¿ãŒãšããŠãã³ãã«ããŒã䜿çšããŠããŸããããã©ãŠã¶ãŒã®ã¬ã³ããªã³ã°ã«ã¯ãã£ãšè¯ãæ¹æ³ããããšæããŸãã
@nknapp VDOMãä»ããŠãã©ãŠã¶ã«åã蟌ãããã«-html-parserãæžãå§ããŸããããæµæã«èŠèãããŸããã
@nknappãè¿äºããããšãããããŸãã ããªãã®ã³ã¡ã³ãã¯æ¬¡ã®ãšããã§ãã
@profullstackç§ã¯ãã®ãããžã§ã¯ãã®
å€æŽãå ããŸããã
@nknappããããšãããããŸããå€ãã®äººãããªãã®å€æŽããæ©æµãåãããšæããŸãã
ãã®åé¡ã¯ããªãå€ãããšã¯ç¥ã£ãŠããŸãããSendgridã®é»åã¡ãŒã«ãã³ãã¬ãŒããšãã£ã¿ããããã®ãã¹ããã©ã¯ãã£ã¹ã«åŸããªãã£ããããæè¿ããã«ééããŸããã ãã®çç±ã§ä»ã®èª°ããGoogleãããã®åé¡ã«ééããå Žåãåé¿çã¯ãã³ãã«ããŒã³ãŒããHTMLã³ã¡ã³ãã«é 眮ããããšã§ãã
<table >
<tbody>
<!-- {{#each items}} -->
<tr>
<td>{{this.key}}</td>
<td>{{this.value}}</td>
</tr>
<!-- {{/each}} -->
</tbody>
</table>
次ã®åºåãçæããŸã
<table>
<tbody>
<!-- -->
<tr>
<td>my key</td>
<td>my value</td>
</tr>
<!-- -->
<!-- -->
<tr>
<td>my key 2</td>
<td>my value 2</td>
</tr>
<!-- -->
</tbody>
<table>
ïŒæ³šïŒSendgridã®ãã³ãã¬ãŒããšãã£ã¿ãŒã§ããã³ãã«ããŒã䜿çšããŠãããçŽæ¥ç¢ºèªããŠããŸããïŒ
ãã®ãã³ããããããšã@gurpreetatwal ã SendGridã®ã¡ãã£ãšããæ å ±ã§ãä»å€ã®ãããã°ã«ãããââæéãç¯çŽã§ããŸããã
@gurpreetatwalãããããªãã§ããïŒ
@Lazarencjuszãªãä¿®æ£ãæ©èœããã®ãããŸãã¯
ããïŒ ããŒãã«ã®ä»£ããã«divèŠçŽ ã䜿çšãããšããæ©èœããŸãã
ãŸãããã¹ãŠã®ããŒãã«èŠçŽ ãdivã«æžãæããŸãã
@gurpreetatwalã®ãœãªã¥ãŒã·ã§ã³ã¯ããã³ãã«ããŒããã³ãã¬ãŒãåããMailchimp / Mandrillsã§æ©èœããŸãã ããããã®ãã©ãã«ãæã£ãŠãããŠããããšãïŒ
æãåèã«ãªãã³ã¡ã³ã
ãã®åé¡ã¯ããªãå€ãããšã¯ç¥ã£ãŠããŸãããSendgridã®é»åã¡ãŒã«ãã³ãã¬ãŒããšãã£ã¿ããããã®ãã¹ããã©ã¯ãã£ã¹ã«åŸããªãã£ããããæè¿ããã«ééããŸããã ãã®çç±ã§ä»ã®èª°ããGoogleãããã®åé¡ã«ééããå Žåãåé¿çã¯ãã³ãã«ããŒã³ãŒããHTMLã³ã¡ã³ãã«é 眮ããããšã§ãã
次ã®åºåãçæããŸã
ïŒæ³šïŒSendgridã®ãã³ãã¬ãŒããšãã£ã¿ãŒã§ããã³ãã«ããŒã䜿çšããŠãããçŽæ¥ç¢ºèªããŠããŸããïŒ