ํ ์ด๋ธ ์ธ๋ถ์์ ๋์ผํ ํธ๋ค๋ฐ #each๊ฐ ์ฑ๊ณตํจ์ ์ฃผ๋ชฉํ์ญ์์ค. ๋ด jsfiddle์๋ ์ด๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ ๊ฐ์ ๊ฒฝ๊ณ ์ถ๋ ฅ์ด ํฌํจ๋์ด ์์ต๋๋ค.
๊ฐ์น๊ฐ ์๊ธฐ ๋๋ฌธ์ {{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
์ฌ์ด์ {{ }}
๊ฐ ๋ง์์ ๋ค์ง ์์ต๋๋ค.
ํธ๋ค๋ฐ๊ฐ ์ด ์ ์ฝ ์กฐ๊ฑด ๋ด์์ ์๋ํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌ์ถ๋๋ฉด ์ข์ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ํ๊ทธ์ ๋ด์ฉ์ ๋ฐ๋ณตํ๋ค๋ ๊ฒ์ ์๋ฌต์ ์ผ๋ก ์ดํดํ๋ฉด์ ํ๊ทธ ๋ด์ "๊ฐ๊ฐ"์ ๋ฐฐ์นํ ์ ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ๋ค๊ณ ์์ํ ์ ์์ต๋๋ค.
<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>
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ์์ ์คํฌ๋ฆฝํธ ๋์, ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ์์ด ๋๋ ์ฌ์ ์ปดํ์ผ๊ณผ ๊ฐ์ ๊ฒ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ์ข ๋ฃํ๋ ๊ฒ์ ํธ๋ค๋ฐ ์์ฒด์ ๋ฒ๊ทธ๋ณด๋ค ๋ธ๋ผ์ฐ์ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ๊ฐ๊น์ต๋๋ค.
{{#each}}๊ฐ ํ ์ด๋ธ์์ ์๋ํ์ง ์๋๋ค๋ ๊ฒ์ ์๊ธฐ ์ ์ ๋ฐ๋์ ์ ๋ญ๋นํ์ต๋๋ค. ์ด๊ฒ์ด ๋จ์ํ ๋ฌธ์์ ๋ช ์๋์ด ์๋ค๋ฉด ์ ๋ง ๋์์ด ๋ ๊ฒ์ ๋๋ค.
๊ฐ๊ฐ์ ์ ๋๋ก ๋ก๋๋๋ฉด ํ ์ด๋ธ์์ ์๋ฒฝํ๊ฒ ์๋ํฉ๋๋ค. ํ ํ๋ฆฟ์ ์ด๋ป๊ฒ ๋ก๋ํ๊ณ ์์ต๋๊น?
@preichelt ๋ธ๋ผ์ฐ์ ๊ฐ ํ ์ด๋ธ์์ {{#each}}๋ฅผ ์๋ง์ผ๋ก ๋ง๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ ค๋ฉด ์คํฌ๋ฆฝํธ ํ๊ทธ ๋ด์์ ํธ๋ค๋ฐ๋ฅผ ๋ก๋ํด์ผ ํฉ๋๋ค. ์คํ ์ค๋ฒํ๋ก์ ๋ํด ์์ธํ ์์๋ณผ ์ ์์ต๋๋ค.
http://stackoverflow.com/questions/15386276/why-should-we-wrap-our-templates-inside-script-blocks
์ด ๋ฒ๊ทธ๋ ๋ด ์ธ์์ ๋ ์๊ฐ์ ๋ญ๋นํ๊ณ ์ง๊ธ์ ํ ์์ผ ์คํ 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 ํ์์ ์๋ ๋ฐฉ์์ ์ ์ดํดํ๊ณ ์์ด์ผ ํ๋ค๊ณ ๊ฐ์ ํฉ๋๊น? ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ ์ง ์๋ค๋ฉด ๋ฌธ์์ ๋ช ํ์ฑ์ ์๋ชป์ด ์๋๋ผ _์ฌ์ฉ์์ ์๋ชป_์ ๋๊น? ์ด ๊ฐ์ ์ ๋ง์ด ๋์ง ์์ต๋๋ค. ๋ ๋ค๋ฅธ ๋ฌด๊ฒ๊ณ ๋ณต์กํ ํ ํ๋ฆฟ ์์ง์ธ 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>
-tag๊ฐ ์๋ ๋ถ๋ถ ํฌํจ)์ ์ด๋ฏธ http://handlebarsjs.com/ ์ ๊ธฐ๋ณธ ํ์ด์ง์
@profullstack ๋๋ ๋น์ ์ด "์๊ฐ ๋ญ๋น"๋ฅผ ํ๋ ๊ฒ์ ๋ํด ์ข์ ๊ฐ์ ๋๋๋ค๋ ๊ฒ์ ์ดํดํ์ง๋ง, ์ ์๊ฐ์๋ ๋น์ ์ ์ด๊ฒ์ ์์ ํ ๊ฑฐ๊พธ๋ก ์๊ฐํ๊ณ ์์ต๋๋ค.
์คํ ์์ค ํ๋ก์ ํธ๋ ๊ธฐ์ฌ์๋ ๊ทํ์๊ฒ ์ด๋ ํ ์๋ฌด๋ ์์ต๋๋ค. ํธ๋ค๋ฐ์ ๊ฐ์ ๋๊ตฌ๋ ๋ค๋ฅธ ๊ฐ๋ฐ์์ ์ถ์ ๋ ์ฝ๊ฒ ๋ง๋ค๊ธฐ ์ํด ๊ฑฐ์ ๋ฌด๋ฃ๋ก ๋ง๋ค์ด์ง๊ณ ์ ์ง ๊ด๋ฆฌ๋ฉ๋๋ค. ์คํ ์์ค ํ๋ก์ ํธ๋ฅผ ์ฌ์ฉํ ์ ์์๋ค๋ฉด ์์ ์๊ฐ์ ์ผ๋ง๋ ๊ฑธ๋ ธ์๊น์?
์ง์ ์์ ์ด๋ฐ ์ด์กฐ๋ก ๋๊ธ์ ์ฐ๋ ๊ฒ์ ์ํ๋ ํจ๊ณผ์ ๋ฐ๋๋๋ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค๋ ์ ์ ๋จผ์ ๋ง์๋๋ฆด ์ ์์ต๋๋ค. ๊ฐ๋จํ ๋น๊ทผ ๋ ์ฑ์ฐ, ๋๊ตฐ๊ฐ๊ฐ ๋น์ ์ ์ํด ๋ฌด์ธ๊ฐ๋ฅผ ํด ์ฃผ๊ธฐ๋ฅผ ์ํ๋ค๋ฉด ์น์ ํ๊ฒ ์์ฒญํ๊ฑฐ๋ ๋ ๋์ PR์ ์ฌ๋ฆฌ๊ณ ์ค์ค๋กํ์ญ์์ค.
@ErisDS ์กฐ์ธ ๊ฐ์ฌํฉ๋๋ค. ๋ด ์ฒซ ๋ฒ์งธ ์๊ฒฌ์ด ๋๋ฌด ๊ฐ๋ ฅํ์ ์๋ ์์ง๋ง ๋ค์๊ณผ ๊ฐ์ ๊ทํ์ ๋ง์ ์ ์ ์ผ๋ก ๋์ํฉ๋๋ค.
to try to making other developers lives easier
๊ทธ๋ฆฌ๊ณ ์ Handlebarsjs๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด Angularjs๋ฅผ ์ญ์ ํฉ๋๊น? _ ๋๋ 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์ ์ ํ์ ๋, ๊ทธ๊ฒ์ ๋ญ๊ฐ ๋ค๋ฅด๊ฒ ๋์ํฉ๋๋ค. ๊ทธ๊ฒ์ ๋ณธ์ฑ ๋๋ฌธ์
๋๋ค.
๋ฐ๋ผ์ "๊ฐ ๋ธ๋ก ๋์ฐ๋ฏธ" ์น์
์๋์๋ ํ ๋ฌธ์ฅ์ด๋ฉด ์ถฉ๋ถํฉ๋๋ค.
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
-helper์ ์๋ฌด ๊ด๋ จ์ด ์๋ค๋ ๊ฒ์
๋๋ค. ๋น์ ์ HTML์ ์ง์ ํ
ํ๋ฆฟ์ ์์ฑํด์๋ ์๋ฉ๋๋ค. ์ด์ ๊ฐ์ ์ง์ ์ ๋ฉ์ธ ํ์ด์ง์ ์์ด์ผ ํ์ง๋ง ์ง๋ฌธ์: ๋น์ ์ด ๊ทธ๊ฒ์ ์ฝ์์ต๋๊น?
๋ฐฉ๋ฌธ ํ์ด์ง์ ์ ์๋์ ๊ทํ์ ๊ฐ์ ๊ฒฝ๊ณ ๊ฐ ์์ ์ ์์ต๋๋ค.
๋ ๋ค๋ฅธ ์ฐธ๊ณ ์ฌํญ:
ํ๋ก๋์ ์์๋ ์คํฌ๋ฆฝํธ ๋ธ๋ก ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ง ์์ต๋๋ค. ๋์ 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์ ์ง์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ช ๊ฐ์ง ์๋ ค์ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด #each ๋ธ๋ก ๋์ฐ๋ฏธ๋ HTML ํ์์ ์๋ ๋ฐฉ์ ์ผ๋ก ์ธํด ํ ์ด๋ธ โโ๋ด์์ ์๋ํ์ง ์์ต๋๋ค
์๋ง๋
<script>
-tag ์์ ๋ฐ๋ก ์๋ํ ํ๋ฆฟ์
<script>
-tag ์์ ๋ฃ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. HTML์ ์ง์ ๋ฃ์ง ๋ง์ญ์์ค. ๊ทธ๋ ์ง ์์ผ๋ฉด HTML ํ์๊ฐ ์์ ํ ์ ์์ต๋๋ค(์ : ํ ์ด๋ธ์ด ํฌํจ๋ ๊ฒฝ์ฐ ).
์ด ์ ๊ทผ ๋ฐฉ์์ ํ๋ก๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ถ์ฅ๋์ง ์์ต๋๋ค. ํ ํ๋ฆฟ์ ๋ฏธ๋ฆฌ ์ปดํ์ผํ๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค. [...]
์ฌ์ค ์ ๋ ๊ฐ์ธ์ ์ผ๋ก ๋ ์ด์ ๋ธ๋ผ์ฐ์ ์์ Handlebars๋ฅผ ์ฌ์ฉํ์ง ์์ ๊ฒ์ ๋๋ค. ๋ค๋ฅธ ๋ง์ ํ๋ ์์ํฌ๊ฐ ์์ต๋๋ค(Angular ๋ฐ React๋ฟ๋ง ์๋๋ผ Vue ๋ฐ Ractive). ์ด ๋น๋์ค ๋ ๊ฝค ๋ฉ์ง๊ณ ๋ฌธ์ ๋ฅผ ๋ณด์ฌ์ค๋๋ค ...
์ ๋ ํธ๋ค๋ฐ๋ฅผ ์๋ฒ์ ์ ์ ํ์ด์ง ์์ฑ๊ธฐ๋ก ์ฌ์ฉํ์ง๋ง ๋ธ๋ผ์ฐ์ ๋ ๋๋ง์ ๊ฒฝ์ฐ ๋ ๋์ ๋ฐฉ๋ฒ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
@nknapp ๋๋ ์ฐ๊ธฐ ์์ ํธ๋ค-HTML ํ์๋ฅผ VDOMs์ ํตํด ๋ธ๋ผ์ฐ์ ๋ก ๊ฐ์ ธ์ ์ฌ์ฉํ์ง๋ง, ์ ํญ์ ๋ง๋ฌ๋ค .
@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 ์์ ์ด ์๋ํ๋ ์ด์ ๋๋ SendGrid ์ด๋ฉ์ผ ํ ํ๋ฆฟ ํธ์ง๊ธฐ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ์ง ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
์๋
ํ์ธ์! ํ
์ด๋ธ ๋์ div ์์๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ํฉ๋๋ค.
๋ํ ๋ชจ๋ ํ
์ด๋ธ ์์๋ฅผ div์ ๋ค์ ์์ฑํฉ๋๋ค.
@gurpreetatwal ์ ์๋ฃจ์ ์ ํธ๋ค๋ฐ์ฉ Mailchimp/Mandrills ํ ํ๋ฆฟ์์ ์ ์๊ฒ ํจ๊ณผ์ ์ ๋๋ค. ๋ง์ ์๊ณ ๋ฅผ ๋์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋๋ ์ด ๋ฌธ์ ๊ฐ ๊ฝค ์ค๋๋์๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง ์ต๊ทผ์ Sendgrid์ ์ด๋ฉ์ผ ํ ํ๋ฆฟ ํธ์ง๊ธฐ๊ฐ ์ด๋ฌํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด์ง ์์ ์ด ๋ฌธ์ ์ ์ง๋ฉดํ์ต๋๋ค. ์ด๋ฌํ ์ด์ ๋ก Google์์ ๋ค๋ฅธ ์ฌ๋์ด ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒฝ์ฐ ํด๊ฒฐ ๋ฐฉ๋ฒ์ HTML ์ฃผ์์ ํธ๋ค๋ฐ ์ฝ๋๋ฅผ ๋ฐฐ์นํ๋ ๊ฒ์ ๋๋ค.
๋ค์ ์ถ๋ ฅ์ ์์ฑํฉ๋๋ค.
(์ฐธ๊ณ : Sendgrid์ ํ ํ๋ฆฟ ํธ์ง๊ธฐ์์๋ง ์ง์ ํธ๋ค๋ฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ํ์ธํ์ง ์์์ต๋๋ค.)