์์ ๋ฒ์ ์ก์ธ์ค
๊ณ ๋ คํ๋ฉด :
node = {
id: 1,
children : [
{ id : 2 },
{ id : 3 }
]
}
๊ทธ๋ฆฌ๊ณ ๋ค์ ํ ํ๋ฆฟ:
{{ id }} {# will output node.id #}
{{#children}}
{{children.id}} {# will output node.children[i].id #}
{{id}} {# will also output node.children[i].id #}
{{/children}}
์๋ ๊ทธ๋๋ก, ๋๋๋ก ์์ ์์ฑ์ ์ก์ธ์คํด์ผ ํฉ๋๋ค(์: ์ค์ฒฉ ๋
ธ๋ ๋ชจ๋ธ์์).
์์ ๋ฒ์๋ฅผ ์ป๊ธฐ ์ํด "../"๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ฒ๋ผ ์ฝ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค.
์ :
{{ id }} {# will output node.id #}
{{#children}}
{{children.id}} {# will output node.children[i].id #}
{{id}} {# will also output node.children[i].id #}
{{ ../id }} {# will output node.id #}
{{/children}}
์ด๋ฅผ ๋ฌ์ฑํ๋ ค๋ฉด ๋ค์์ ์ํํ์ญ์์ค.
Context.prototype.lookup = function (name) {
var cache = this.cache;
var value;
if (name in cache) {
console.log(name + ' found');
value = cache[name];
} else {
var context = this, names, index;
while (context) {
if (name.indexOf('.') > 0) {
value = context.view;
names = name.split('.');
index = 0;
while (value != null && index < names.length)
value = value[names[index++]];
} else if(name.match(/^\.\.\//)) {
name = name.replace(/^\.\.\//, '');
} else {
value = context.view[name];
}
if (value != null)
break;
context = context.parent;
}
cache[name] = value;
}
if (isFunction(value))
value = value.call(this.view);
return value;
};
์ด๊ฒ์ mustache
์ ์ฌ์์ ์์ง ์์ต๋๊น? ์ด์ ๋ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์๋์? ์ ์๋ ์๋ฌด๋ ์ด ์ ํ ์ฌํญ์ ๋ถ๋ชํ์ง ์์๋ค๋ ์ฌ์ค์ ๋๋์ต๋๋ค.
๋ถ๋ชจ ๋ฒ์์ ์๋ ํญ๋ชฉ์ ์ก์ธ์คํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค๋ ๋ฐ ๋์ํฉ๋๋ค. ๋์ ์ค์ฉ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ํญ์ ๋ชจํธํ ์์ฑ ์ด๋ฆ์ ํผํ๋ ๊ฒ์ด์์ต๋๋ค. ๊ทธ๊ฒ์ ์ข ์ข ์ด์ํ ๋ฌผ์ฒด๋ฅผ ์ด๋ํ์ง๋ง ์ค๋ซ๋์ ๋๋ฅผ ์ํด ์ผํ์ต๋๋ค.
๋ฐ๋ฉด์ ํธ๋ค ๋ฐ์ ๋ํ ๊ฒฝํ์ ๋ํด ์ด์ผ๊ธฐํ์๋ฉด, ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ์ฌ๋๋ค์ด ์ฝํ ์์ ๋ฒ์ ํด๊ฒฐ์ ๋ง๋ค๋๋ก ์ ํนํ ์ ์์ต๋๋ค. {{../../../id}}
๋ {{movieId}}
๋ณด๋ค ์ดํดํ๊ธฐ ํจ์ฌ ์ด๋ ต์ต๋๋ค.
"../"๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ์ ์ ์๊ฒ ๋ ์ ์๋ ๊ฒ์ด ์ฌ์ค์ ๋๋ค. ๊ทธ๋ฌ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก caml์ ์ฌ์ฉํ์ฌ ๋ถ๋ชจ๋ฅผ ํ์ธํ๋ ๊ฒ์ ๋ก์ปฌ ๋ฒ์์์ caml์ ๊ฐ์ง ์ ์์ผ๋ฏ๋ก ๋ฌ์ฑํ ์ ์์ต๋๋ค. ๊ฒ๋ค๊ฐ, ๋ถ๋ชจ์ ์ ๊ทผํ๊ธฐ ์ํ ํค์๋๋ฅผ ์ ์ํ๋ ๊ฒ์ ๋ด๊ฐ ์๊ฐํ๋ Mustache ์ฒ ํ์ ์กด์คํ์ง ์์ ๊ฒ์ ๋๋ค.
์์งํ ๋งํ๋ฉด ๋๋ ํ ๋ฆฌ ํํ์ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ๋ ๊ฐ๋จํ๊ณ ๋ ๋์ ์์ด๋์ด๋ฅผ ์ป์ ์ ์์์ต๋๋ค.
์, ๋ชจํธํ ์์ฑ ์ด๋ฆ์ ํผํ๋ฉด ๋ ์ฝ๊ธฐ ์ฝ๊ณ ์ฅํฉํ ํ ํ๋ฆฟ์ด ์๊น๋๋ค. ํ์ง๋ง ์ผ๋ถ ์ฌ๋๋ค์ด ์ด ๊ธฐ๋ฅ์ ์ข์ํ๋ ์ด์ ๋ฅผ ์ดํดํฉ๋๋ค.
์ํ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ธฐ ์ํด mustache.js
์ ๋ด๋ถ ๋์์ ์์ ํ๋ ๋ณ๋์ ํจํค์ง๋ฅผ ์์ฑํ๋ ๊ฒ์ ์ด๋ป์ต๋๊น? ์ผ์ข
์ ํ๋ฌ๊ทธ์ธ๊ณผ ๊ฐ์ต๋๋ค.
์์งํ ๋งํด์ ํ๋ฌ๊ทธ์ธ์ด๋ ํ๋ผ๊ทธ๋ง๋ฅผ ํตํ์ง ์๋ ํ ์ด๋ฐ ์ผ์ด ์ค์ ๋ก ์ผ์ด๋๋ ๊ฒ์ ๋ณด์ง ๋ชปํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋ฌ๊ทธ์ธ API๋ ์ง๊ธ ๋น์ฅ์ ์ฐ์ ์์๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ด๊ฒ์ ๋ํด ์ข ๋ ์๊ฐํด๋ดค๋๋ฐ...
Mustache์ ์ฒ ํ์ ๋ฐ์ดํฐ๋ฅผ ๋ ๋๋ฌ์ _์๋ ๊ทธ๋๋ก_ ์ ๋ฌํ๋ ๊ฒ์ด ์๋๋ผ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ์ '์ค๋น'ํ๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ฉด ๋
ธ๋์ parentId
์์ฑ์ด ์๊น๋๋ค.
๋ํ ๋ ์์ธํ ๋ณ์๊ฐ ์๋ ํ ํ๋ฆฟ์ ์ฝ๊ณ ์ ์ง ๊ด๋ฆฌํ๋ ๊ฒ์ด ๋ ์ฝ์ต๋๋ค.
{{ id }}
{{#children}}
{{children.id}}
{{id}}
{{/children}}
์ vs ํ
{{ nodeId }}
{{#children}}
{{ nodeId }}
{{ parentId }}
{{/children}}
( @bobthecow ๋ฅผ
์ด๋ฏธ ์ฌ๋ผ๊ฐ ์ ์์ผ๋ฏ๋ก ์ฒซ ๋ฒ์งธ ํ
ํ๋ฆฟ์ ํ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ชจ๋ ์ฌ๋๋ค์ ๋ฐ์ดํฐ๋ฅผ ์์ ๊ฐ์ฒด {node: ... }
๋ก ๋ํํ๊ณ ํ
ํ๋ฆฟ์ {{#node}}...{{/node}}
๋ํํ ๋ค์ {{node.id}}
๋ถ๋ถ์ด ์๋ํ ์ ์์ต๋๋ค. ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฐ ์์ผ๋ก ๋ณ๊ฒฝํ ํ์๊ฐ ์์ผ๋ฉฐ to_html()
ํ
ํ๋ฆฟ์ผ๋ก ๋ "JIT"๋ฅผ ๋ชจ๋ ์ถ๊ฐํ ์ ์์ต๋๋ค.
ํจ์น ์ํฌ ์ด๋ผ์ด๋์ฒ๋ผ ๋๊ปด์ง๋๋ค. ๋ํ ์ธ๋ถ ๋ ์ด์ด์ ๋ํ ๋ดํฌ ๋ฉ์ผ๋ก ํด๊ฒฐํ ์ ์๋ ๋จ์ํ 2-๋ ๋ฒจ ๋ชจ๋ธ์์๋ง ์๋ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ชจ๋ธ์ด ๋ ๊น๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ์ ๊ธ๋ง ๋๋์ ๋๋ค.
ํ์ ๋ฐ์ดํฐ ๊ณ์ธต์์ ์ป์ ๋ชจ๋ธ์ ๋ฐ์ธ๋ฉํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์ข
์ข
์๋๋ฐ ์ธํ๋ผ์์ ์ป์ ์ด๋ค ํํ๋ก๋ ๋ชจ๋ธ์ ์ ์ํ๋ ๊ฒ์ด ์ ์ผ์
๋๋ค. ์ฌ๊ธฐ์ ์ ์ํ๋ ๊ฒ์ ๋ชจ๋ธ์ ํํ ๊ฐ๋ฅํ ์ํ๋ก ์์ ํ ์ฌ๊ท์ ์ผ๋ก ๋ณํํด์ผ ํ๋ค๋ ๊ฒ์
๋๋ค. ์ฌ๊ธฐ์ redable property names
๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
์ด๊ฒ์ ํ์ค์ ํธ๋ฆฌํ๊ฒ ๋ง์ง ์๋๋ค...
์, ์ฌ์ค, ํ
ํ๋ฆฟ๊ณผ ๋ชจ๋ธ์ ์ฐ๊ฒฐํฉ๋๋ค. ํ์ง๋ง ๊ตฌ์ฒด์ ์ธ ๋ชจ๋ธ ๊ท์น๊ณผ ๊ฒฐํฉ๋์ง ์์ ํ
ํ๋ฆฟ์ ๋ณด์ฌ์ค ์ ์์ต๋๊น? ๋ชจ๋ ํ
ํ๋ฆฟ์ ์ ์์ ๋ฐ๋ผ ์ ์๋ ๋ชจ๋ธ์ ๋ ๋๋งํ๋๋ก ๋ง๋ค์ด์ก์ต๋๋ค.
๋ ๋ค๋ฅธ ๋ ์ด์ด๋ ์ ์ ๋ ์ด์ด๋ฅผ ํ ๋จ๊ณ ๋ค๋ก ์ด๋ํ๊ณ ๋ฒ์ญ ๋ ์ด์ด๋ฅผ ํ์๋ก ํฉ๋๋ค.
IMHO, ๋๋ ๋๊ตฌ๊ฐ ๋ ๋จ์ ์ธ ๊ท์น์ ๋ถ๊ณผํ๊ธฐ๋ณด๋ค๋ ์ฌ์ฉ์์๊ฒ ์ ํ์ ๋งก๊ฒจ์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค
๋ ์๋ฅผ ์ํด @rndme ๊ฐ ์ ์ํ๋
const Mustache = require('mustache')
var view = {
node: {
id: 5,
children: [ { id: 6 }, { id: 7 } ]
}
}
const template = `
{{#node}}
children:
{{#children}}
id: {{ id }}
parentId: {{ node.id }}
{{/children}}
{{/node}}
`
const output = Mustache.render(template, view)
console.log(output)
children:
id: 6
parentId: 5
id: 7
parentId: 5
๋ค์ ํ
ํ๋ฆฟ์ ์ฌ์ฉํ๋ฉด latest
์๋ํ์ง ์์ง๋ง _์๋ํด์ผ ํฉ๋๋ค_, imo.
const template = `
children:
{{#node.children}}
id: {{ id }}
parentId: {{ node.id }}
{{/node.children}}
`
์, ์ฌ์ค, ํ ํ๋ฆฟ๊ณผ ๋ชจ๋ธ์ ์ฐ๊ฒฐํฉ๋๋ค. ํ์ง๋ง ๊ตฌ์ฒด์ ์ธ ๋ชจ๋ธ ๊ท์น๊ณผ ๊ฒฐํฉ๋์ง ์์ ํ ํ๋ฆฟ์ ๋ณด์ฌ์ค ์ ์์ต๋๊น? ๋ชจ๋ ํ ํ๋ฆฟ์ ์ ์์ ๋ฐ๋ผ ์ ์๋ ๋ชจ๋ธ์ ๋ ๋๋งํ๋๋ก ๋ง๋ค์ด์ก์ต๋๋ค.
๋ค๋ฅธ ๋ ์ด์ด๋ ์ ์ ๋ ์ด์ด๋ฅผ ํ ๋จ๊ณ ๋ค๋ก ์ด๋ํ๊ณ ๋ฒ์ญ ๋ ์ด์ด๊ฐ ํ์ํฉ๋๋ค. ์ด๋ ์ง๋ฃจํ๊ณ ํญ์ ํ์ํ ๊ฒ์ ์๋๋๋ค.
Afaik, Mustache ์ฒ ํ์ ํญ์ ํ ํ๋ฆฟ์ ์ ๋ฌ๋๋ ๋ณด๊ธฐ๋ฅผ ์์ฑํ๋ค๋ ๊ฒ์ ๋๋ค. ๋ชจ๋ธ์ ์ง์ ์ ๋ฌํ์ง ์์ต๋๋ค.
@osher ์์์ ์ธ๊ธํ ํ/๋น๋ฒ์ผ๋ก๋ ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋ ์๋ฅผ ๋ณด์ฌ ์ฃผ์๊ฒ ์ต๋๊น?
๋์ค์ ์ค๋ํซ์ ์ ๊ณตํ๋ ค๊ณ ํ๊ฒ ์ง๋ง ๊ธฐ๋ณธ์ ์ผ๋ก - 3๊ฐ ๋ ๋ฒจ์ด ์ค์ฒฉ๋๋ฉด ์ค๊ฐ ๋ ๋ฒจ์ ๋ํํ ์ ์๊ธฐ ๋๋ฌธ์ ์๋ํ์ง ์์ต๋๋ค. - ์์ค๋ฅผ ์ฒ๋ฆฌ๋ ๋ณด๊ธฐ๋ก ๋ณํํด์ผ ํฉ๋๋ค.
๋ํ๋ ์ต์์ ์์ค์ ์ก์ธ์คํ ์ ์์ง๋ง ์ค๊ฐ ์์ค์ ๋ํ ์๋ฃจ์
์ ์์ต๋๋ค.
๋ฃจํธ ์์ค, ๊ฒฝ๋ก ์์ค, ๋์ฌ ์์ค์ด ์๋ swagger ๋ฌธ์๋ฅผ ์๋ก ๋ค์ด ๋ณด๊ฒ ์ต๋๋ค. ๊ฐ ์์ค์ ๊ตฌํ ๊ณ์ธต์ ๋ํ DI ์ง์๋ฌธ์ธ ์ฌ์ฉ์ ์ง์ ์ง์๋ฌธ - x-uses
์ง์ ํ ์ ์์ต๋๋ค.
์ด swagger ๋ฌธ์์์ HTML ๋ฌธ์๋ฅผ ์์ฑํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
๊ฐ ์์
ํธ๋ค๋ฌ(๋์ฌ ์์ค)๊ฐ ์๋ฝํ๋ DI์ ์ด๋ฅผ ์์ํ๋ ๊ณ์ธต์ ์ง์ ํ๋ ํ๋ซ ํ
์ด๋ธ์ด ํ์ํฉ๋๋ค.
๋ชจ๋ ์ ๋ณด๊ฐ swagger ๋ฌธ์์ ๋ด์ฌ๋์ด ์์ง๋ง ์ด์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๋ค์.
์ฝง์์ผ์ ์ฌ์ฉํ์ฌ ์์
๊ธฐ๋ณธ ์๋ต์ ๊ธฐ๋ฐ์ผ๋ก ๋ชจ์ ์๋ต์ ๋ฐํํ๋ ๋ฌธ์์ ์ค๋ช
๋ API๋ฅผ ๊ตฌํํ๋ ์ฝ๋๋ฅผ ์์ฑํด ๋ณด์ญ์์ค.
๋ชจ์ ์๋ต์ ์ค์ ๋
ผ๋ฆฌ๋ก ๋์ฒดํ๊ธฐ ์ํด ์ค๋ ๊ตฌํ ๊ฐ๋ฐ์๊ฐ DI ์ปจํ
์คํธ์์ ๊ธฐ๋ํด์ผ ํ๋ ๊ฒ์ ์ค๋ช
ํ๋ doclet์ ์์ฑํ๊ณ ๊ทธ๋ค์ด ์ป์ ์์ค์ ๋ํด ๊ตฌ์ฒด์ ์ผ๋ก ์ค๋ช
ํ์ญ์์ค.
๊ฐ์...
๊ณ ์ ์ ์ธ HTML ์์ฑ์ด ์๋๋๋ค - ์. ํ์ง๋ง ๋๊ฐ ์ฝง์์ผ์ด HTML ์ ์ฉ์ด๋ผ๊ณ ๋งํ์ต๋๊น? ํ ํ๋ฆฟ ์์ง์ด๋ฉฐ ์ฝ๋ ์์ฑ์ ์ผ๋ฐ์ ์ผ๋ก ์ด๋ฌํ ํ ํ๋ฆฟ ์์ง์ ์ฌ์ฉํ์ฌ ๊ตฌํ๋ฉ๋๋ค.)
๋ชจ๋ธ์ ์ง์ ์ ๋ฌํ์ง ์์ต๋๋ค.
์ ํ/์ ํ์ด ์๋ ์ฌ์ฉ์์ ์ ํ์ด์ด์ผ ํฉ๋๋ค.
์๋ฅผ ํ๋ ๋ ๋ค๊ฒ ๋ค, ๊ทธ๋ฆฌ๊ณ ๋น๋ฒ ์์ค๋ฅผ ๋ฐฐ์ ํ์ง ์๊ณ ํด๋ณผ๊ฒ.
์ ๋ต ๊ฒ์์์ ํ๋ ์ด์ด๊ฐ ์์ ํ ์์ฐ์ ์ค๋ช
ํ๋ ํธ๋ฆฌ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ํฉ๋๋ค.
ํธ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ด ์ฝ 5๋จ๊ณ๋ก ์ด๋ํ ์ ์์ต๋๋ค.
Aliance -> Empire -> City -> Army -> Troops
๊ฐ ๋ ๋ฒจ์ ์์ ์ ๋ณด๋์ค(์: ๊ณต๊ฒฉ ๋ณด๋์ค, ๋ฐฉ์ด ๋ณด๋์ค, ๊ฑด๊ฐ ๋ณด๋์ค ๋ฑ)๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.
๋์ผํ ํต๊ณ๋ฅผ ์ฒ๋ฆฌํ๋ ์์ ์๋ ๋ชจ๋ ์์ค์์ ๋์ผํ ์ด๋ฆ์ผ๋ก ์ค๋ช
๋ฉ๋๋ค(์ฃผ๋ก ์ฌ๊ท์ ์ผ๋ก ๊ณ์ฐ๋๊ธฐ ๋๋ฌธ์).
ํ
ํ๋ฆฟ ์์ง์ ์ฌ์ฉํ์ฌ ๊ฐ์ฅ ๋ฎ์ ์์ค์ ์์ง๋ง ์ ํฌ๋ฅผ ์์งํ๋ ๊ตฐ๋ ๋ด ๊ตฐ๋์ ์ ํฌ ํต๊ณ๋ฅผ ํ์ํ์ฌ ํ๋ ์ด์ด๊ฐ ์ฃผ์ด์ง ๊ณผ์ ์ ๋ํด ์ด๋ค ๊ตฐ๋๊ฐ ์ด์์ ์ธ ๊ตฐ๋์ธ์ง ์ ํํ๋ ๋ฐ ๋์์ด ๋๋ ์ ํฌ ์๋ฎฌ๋ ์ดํฐ๋ฅผ ์ ๊ณตํด์ผ ํฉ๋๋ค. ํธ๋ฆฌ์์ ๋์ผํ ์์ฑ ์ด๋ฆ์ผ๋ก ๋ช
๋ช
๋ ์์ ์.
์ด๊ฒ์ _๋งค์ฐ_ ๊ฐ๋จํ์ง๋ง ์ค๊ฐ ๋ฒ์ญ ๊ณ์ธต ์์ด ๋ค๋ฅธ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ๋งค์ฐ ์ฝ๊ฒ ํด๊ฒฐํ ์คํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
์ด๋ ค์์ ์ถ๊ฐํ๊ฒ ์ต๋๋ค. ๋๋๋ก ๊ตฐ๋๋ ์ผ๋ผ์ด์ธ์ค ์์ค์ ํ์คํฌ ํฌ์ค์ ํ ๋น๋ฉ๋๋ค.
Alliance -> Rally -> Troops
๋๊ตฌ๋ ์ถฉ๋ถํ ์ผ๋ฐ์ ์ด์ด์ผ ํ๋ฉฐ(์ผ๋ฐ ์ฌ๊ท์ ) ๊ตฌ์ฒด์ ์ธ ์์ค์ ์์กดํ์ง ์์์ผ ํฉ๋๋ค.
๋๋ ์ฝง์์ผ์ด ๋ถ๋ถ์ด๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฒ์ผ๋ก ํด๊ฒฐํ์ง๋ง ์ฝง์์ผ์ ์ฌ์ฉํ์ง ์์์ต๋๋ค ...
@osher ๋ ๋ค์๊ณผ
์ ํ/์ ํ์ด ์๋ ์ฌ์ฉ์์ ์ ํ์ด์ด์ผ ํฉ๋๋ค.
์ฝง์์ผ์ ์๊ฒฌ์ด ์๋ค๋ ๊ฒ์ ์์ฌ์ ์ฌ์ง๊ฐ ์์ต๋๋ค. "๋ก์ง์ด ์ ์ ํ ํ๋ฆฟ" ์ฒ ํ์ ํ ํ๋ฆฟ์ ๋ง์ ์ ํ์ ๋๋๋ฐ, ๊ทธ ์ฌ์ค์ ๋ ๋๋ง์ ์ํด ํ ํ๋ฆฟ์ ์ ๊ณตํ๊ธฐ ์ ์ ๋ฐ์ดํฐ/๋ชจ๋ธ ์ค๋น๊ฐ ์ข ์ข ํ์ํ๋ค๋ ์ฌ์ค์ ๋๋ค. ์ด๊ฒ์ด ๊ทํ์ ์๊ตฌ์ ์ ํฉํ์ง ์์ ๊ฒฝ์ฐ ํธ๋ค ๋ฐ ๋๋ lodash.template ๊ณผ ๊ฐ์ ๋ช ๊ฐ์ง ์๋ฅผ ๋ค๋ฉด ๋ ๋์ ๋์์ด ์์ต๋๋ค.
์ค๋ฅธ์ชฝ. ํธ๋ค๋ฐ๋ฅผ ๊น๋งฃ๊ฒ ์๊ณ ์์์ต๋๋ค.
ํธ๋ค๋ฐ์ ์ฌ์ฉ์๋ฅผ ์๊ฒ ํฉ๋๋ค.
๊ทธ๊ฒ์ ๋ฐ์๋ค์ผ ์ ์๋ ๋์์ธ ๊ฒฐ์ ์
๋๋ค.
@osher ๊ฐ "๊ทธ๊ฑด ๋ฐ์๋ค์ผ ์ ์๋ ๋์์ธ ๊ฒฐ์ ์
๋๋ค."๋ผ๊ณ ๋งํ์ ๋
https://github.com/mustache/mustache.github.com/issues/103
์ฐ์ ์์ ๋ฒ์๋ฅผ ์ฐธ์กฐํ ์ ์๋ค๋ ๊ฒ์ ๋ ผ๋ฆฌ์ ์ด์ง ์์ผ๋ฉฐ ์ฝง์์ผ์ ์ด์์ ๋ฐฉํดํด์๋ ์ ๋๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋๋ ํญ์ ์ ํ "../"์ ๊ฐ์ ๊ธฐํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฃจํธ ๋ฒ์์ ์ก์ธ์คํ ์ ์๋ค๋ ์์ด๋์ด๋ฅผ ์ข์ํฉ๋๋ค.
Mustache.render('{{a1}}{{#a}}{{b.c}}{{../a1}}{{/a}}',{"a":{"b":{"c":"x1"}},"a1":"x2"})
"x2x1"
๋๋ ์ด๊ฒ์ด "x2x1x2"๋ฅผ ๋ ๋๋งํ๊ธฐ๋ฅผ ์ํ์ง๋ง ๊ทธ๊ฒ์ด ์๋ํ๋ ๋ฐฉ์์ด ์๋๊ธฐ ๋๋ฌธ์ ๋ง์ง๋ง ๊ฒ์ ์๋ตํฉ๋๋ค.
JSONPath: https://goessner.net/articles/JsonPath/index.html#e2 ์ ๊ฐ์ ๊ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค๊ณ ์๊ฐํ์ง๋ง XPath for XML๊ณผ ๋ฌ๋ฆฌ ๋ถ๋ชจ ์ฐ์ฐ์๋ฅผ ๊ถ์ฅ/๊ตฌํํ์ง ์์ต๋๋ค. ์์ํ.
์๋ง๋ Mustache๋ ํธ๋ค๋ฐ์ ํธํ์ฑ์ ์ ์งํ๊ณ ์์ ์ปจํ
์คํธ์ ../
๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ ค๊ณ ํ ์ ์์ต๋๊น?
AFAIK, ํธ๋ค๋ฐ๋ JS ์ ์ฉ์ธ ๋ฐ๋ฉด ์ฝง์์ผ์ ๋ง์ ํ๊ฒฝ(์: PHP)์์ ๋์ผํ ๊ตฌ๋ฌธ์ ์ฌ์ฉํฉ๋๋ค. ์ฝง์์ผ ๊ตฌ๋ฌธ์ ๋ณ๊ฒฝํ๋ ค๋ฉด js๊ฐ ์๋ ๋ค๋ฅธ ๋ชจ๋ ๊ตฌํ๋ ๋์ผํ๊ฒ ํด์ผ ํฉ๋๋ค. ๊ธด ์ฃผ๋ฌธ. ๊ฒ๋ค๊ฐ, JS ์ฝ๋๋ฅผ ์์ ํ ๋ "ํ ๋ ๋ฒจ" ์ฌ๋ผ๊ฐ๋ ๊ฒ์ด ๋ฌธ์ ๊ฐ ์์์ ๋ฐ๊ฒฌํ์ต๋๋ค. ๋น๋ก ๊ตฌํํ๊ธฐ ๊ฐ ๋งค์ฐ ํฌํฌ์ ๋ฃจํธ๋ก ๋์๊ฐ๋ ๋ฐฉ๋ฒ์ ์ถ๊ฐํ์ง๋ง ...
์ด๊ฒ์ ๋ํด ์๋ฌด๊ฒ๋?
์ ํ๊ธฐ๋ฒ์ด ์ ํ ์ฌํญ์ธ ์ํฉ์ ๋ํ ๋ฌธ์ ๋ฐ ์คํ์ผ ๊ถ์ฅ ์ฌํญ๋ ํ์ํฉ๋๋ค.
view = { wrap: { txt: "test" } };
{{#wrap}}
{{wrap.txt}} {{! Should I use this?}}
{{txt}} {{! Or this?}}
{{/wrap}}
์์ธํ ๋ด์ฉ์ ์ฌ๊ธฐ: https://stackoverflow.com/q/62166467/5637701
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ค๋ฅธ์ชฝ. ํธ๋ค๋ฐ๋ฅผ ๊น๋งฃ๊ฒ ์๊ณ ์์์ต๋๋ค.
ํธ๋ค๋ฐ์ ์ฌ์ฉ์๋ฅผ ์๊ฒ ํฉ๋๋ค.
๊ทธ๊ฒ์ ๋ฐ์๋ค์ผ ์ ์๋ ๋์์ธ ๊ฒฐ์ ์ ๋๋ค.