λ²μ 2.3.1 μ΄ν μ¬μ©μ μ μ κ΅¬λΆ κΈ°νΈ λ Mustache.parse()
μ λν΄ λ μ΄μ μλνμ§ μμ΅λλ€. λ€μ μλ₯Ό μ°Έμ‘°νμμμ€.
μ΄κ²μ #663 λ° ν΄λΉ μμ μ¬νκ³Ό κ΄λ ¨μ΄ μμ κ°λ₯μ±μ΄ ν½λλ€. λμ μλ‘μ΄ Mustache.tags = [...]
λ₯Ό μ¬μ©νμ¬ λ³΅μν μ μμ΅λλ€. https://codepen.io/mbrodala/pen/QBJoOx
μ΄κ² μ’ λ΄μ£Όμκ² μ΄μ?
@mbrodala λ³΄κ³ μμ κ°μ¬λ립λλ€. ν΄λΉ μ½λνμ κ°μ¬λ립λλ€!
@mbrodala codepens μ κ°μ¬λ립λλ€.
μ¬κΈ°μ μ€ν΄κ° μμλμ§ κΆκΈν©λλ€.
describe('when parsing a template with tags specified followed by the same template with different tags specified', function() {
it('returns different tokens for the latter parse', function() {
var template = "(foo)[bar]";
var parsedWithParens = Mustache.parse(template, ['(', ')']);
var parsedWithBrackets = Mustache.parse(template, ['[', ']']);
assert.notDeepEqual(parsedWithBrackets, parsedWithParens);
});
});
parse
ν¨μλ μΊμ ν€λ‘ template
λ§ μ¬μ©νμ¬ μΊμ±νλ―λ‘ λ€μμ parse
λ₯Ό μ¬μ©νμ¬ ν΄λΉ ν
νλ¦Ώμ ꡬ문 λΆμνλ©΄ μ νν λμΌν ν ν°μ λ°νν©λλ€. μ§μ λ tags
κ° λ€λ₯Έ κ²½μ°.
tags
λ μ νμ 맀κ°λ³μμ΄λ©° μλ΅νλ©΄ κΈ°λ³Έμ μΌλ‘ ['{{', '}}']
μΈ mustache.tags
λ‘ λ체λ©λλ€. λ체 mustache.tags
λ μΊμ ν€μ μΌλΆλ‘ μ¬μ©λ©λλ€.
λ²κ·Έ μμ λ° κΈ°λμΉμ κ΄λ ¨νμ¬ λ¬΄μ¨ μΌμ΄ μΌμ΄λκ³ μλμ§ μκ³ μλ€κ³ μκ°ν©λλ€. μ΄μ λν΄ μ΄ν΄λ³΄κ³ codepenμ μλ‘ μ¬μ©νκ² μ΅λλ€.
Mustache.parse(template, ['[[', ']]']);
2.3.0μμ μ΄κ²μ ['[[', ']]']
λ₯Ό νκ·Έλ‘ μ¬μ©νμ¬ $ template
λ₯Ό ꡬ문 λΆμνλλ‘ Mustacheμ μ§μν©λλ€. Mustacheλ κ·Έλ κ² νκ³ μ¬λ°λ₯Έ κ²°κ³Όλ₯Ό λ°ννμ§λ§ template
λ§ μ¬μ©νμ¬ νΈμΆμ μΊμν©λλ€. [email protected]
μ 447-450ν μ°Έμ‘°:
if (tokens == null)
tokens = cache[template] = parseTemplate(template, tags);
codepenμ λ€μ νΈμΆμ λ€μκ³Ό κ°μ΅λλ€.
var output = Mustache.render(
template,
...
render
λ tags
맀κ°λ³μλ₯Ό μ¬μ©νμ§ μμΌλ―λ‘ parse
$ μ 맀κ°λ³μλ₯Ό μ λ¬νμ§ μμΌλ―λ‘ render
κ° νΈμΆλ λ $ parse
λ mustache.tags
λ₯Ό μ¬μ©ν©λλ€. render
νΈμΆμ΄ μ΄λ£¨μ΄μ§λ©΄ ν¨κ³Όμ μΌλ‘ parse
" template
λ₯Ό ꡬ문 λΆμνκ³ ['{{', '}}']
λ₯Ό tags
μΌλ‘ μ¬μ©νμμμ€. parse
λ μ€μ λ‘ μλͺ»λ μΌμ νκ³ tags
λ° mustache.tags
λͺ¨λλ₯Ό μμ ν 무μνκ³ μΊμ μ‘°νλ₯Ό μνν©λλ€. [['[', ']']]
λ‘ κ΅¬λ¬Έ λΆμλ ν
νλ¦Ώμ κ²°κ³Ό λ₯Ό λ°ννμ§λ§ ν΄λΉ template
μ λν μ 체 νλ‘κ·Έλ¨μμ parse
μ λν 첫 λ²μ§Έ νΈμΆμ΄ ['[[', ']']]
λ‘ μ΄λ£¨μ΄μ‘κΈ° λλ¬Έμ
λλ€. tags
.
Mustache.parse(template, ['[[', ']]']);
ꡬ문 λΆμ κ²°κ³Όλ template
λ° tags
λ₯Ό λͺ¨λ μ¬μ©νμ¬ μΊμλ©λλ€. ['[[', ']]']
λ cacheKeyμ
λλ€.
λ€μ νΈμΆ:
var output = Mustache.render(
template,
...
render
λ parse
$ λ₯Ό νΈμΆνκ³ $#$ template
#$ λ₯Ό μ λ¬νμ§λ§ tags
λ μλ΅ν©λλ€. λ°λΌμ parse
μλ tags
κ° mustache.tags
λ‘ λ체λλ©°, μ΄λ κΈ°λ³Έ ['{{', '}}']
λ‘ μ μ§λ©λλ€. parse
λ template
λ° ['{{', '}}']
μ μΊμ ν€μ λν΄ μΊμ μ‘°νλ₯Ό μννκ³ parse
κ° μμ§ νΈμΆλμ§ μμκΈ° λλ¬Έμ μμλλ‘ μΊμ λλ½μ΄ λ°μν©λλ€. template
λ° νκ·Έμ μ‘°ν©μΌλ‘. λ°λΌμ ['{{', '}}']
$ λ₯Ό μ¬μ©νμ¬ $ template
λ₯Ό ꡬ문 λΆμν©λλ€.
λλ v2.3.1μ΄ μ¬λ°λ₯Έ λμμ 보μΈλ€κ³ λ―Ώμ΅λλ€. https://codepen.io/mbrodala/pen/QBJoOx μμ codepenμ μ½κ° λ³κ²½νκ³ v2.3.0μ λν΄ μ€ννλ€λ©΄:
var template = "[[item.title]] [[item.value]]";
Mustache.parse(template, ['[[', ']]']);
var output = Mustache.render(
template,
{
item: {
title: "TEST",
value: 1
}
}
);
alert(output);
μΆλ ₯μ μμνμ§ λͺ»ν [[item.title]] [[item.value]]
μ
λλ€.
Mustache.parse
λ° Mustache.render
νΈμΆμ΄ μλ‘ λ°λ‘ μμ μκ³ νλκ° μλ μλ μκΈ° λλ¬Έμ https://codepen.io/mbrodala/pen/NBEJjX μ λμμ΄ μΌλ§λ λλΌμ΄μ§ μ μ μμ΅λλ€. Mustache.parse
λ tags
μΈμλ μ·¨νλ€λ μ¬μ€μ κΉ¨λ«μ΅λλ€. ( Mustache.parse
κ° tags
μΈμλ₯Ό μ·¨νλ μ΄μ λ 무μμ
λκΉ? mustache.js
-- parse
λ΄λΆμ μΌλ‘λ κΈ°λ³Έμ μΌλ‘ mustache.tags
μ΄λμλ μ¬μ©λμ§ μμ΅λλ€. ..)
νλμ λ³νκ° μ€μ λ‘ bugfix 릴리μ€μ κΈ°λλ₯Ό 무μνλ€λ©΄ 무μμ ν΄μΌ ν μ§ μ νν λͺ¨λ₯΄κ² μ΅λλ€. ν κ°μ§ κ°λ₯μ±μ #664κ° λλλ €μ§ λ€λ₯Έ λ²κ·Έ μμ λ²μ μ 릴리μ€νλ κ²μ
λλ€. μ΄ λ²μ μ μ¬μ€μ λͺ¨λ μΊμ± λμμ μ κ±°ν©λλ€(#643μμ λͺ¨λ μΊμ μ‘°νκ° λλ½λ¨). κ·Έλ° λ€μ #664λ₯Ό λ€μ μ£Όμ κ°μ νμ λ€μ λ£μ μ μμ΅λλ€. λ λ€λ₯Έ κ°λ₯μ±μ bugfix 릴리μ€μμ λͺ¨λ μΊμ±μ μ κ±°νκ³ (λΉκΈ°λ₯μ μΊμ±μΌλ‘ mustache.js
λ₯Ό 릴리μ€νλ κ²κ³Ό λ°λ) λͺ¨λ μΊμ±μ λ€μ μ£Όμ κ°μ νμ λ€μ λ£λ κ²μ
λλ€. μ μμ μ΅μ
μ μνμ΄ λνμ§λ§(μ½λ λ³κ²½μ΄ κ°μ₯ μ μ) νμμ μ΅μ
μ΄ λ "μ¬λ°λ¦
λλ€". @phillipj μκ°?
λ΄ POVμμ μμ ν μ΄ν΄λλ μμΈν μ°κ΅¬μ κ°μ¬λ립λλ€.
λ³κ²½ μ¬νμ λν΄ μ ν μ κ²½ μ°μ§ μμ§λ§ μΊμ μ μ€μ 보μ₯νκΈ° μν΄ tags
λ₯Ό Mustache.render()
μ μ λ¬νλ κ²μ΄ λΆκ°λ₯νκ³ Mustache.parse()
κ° template
λ₯Ό μΊμνλλ‘ κ΄κ³ λλ€λ μ μ κ°μν λ tags
μ λν μΈκΈ μμ) μ΄κ²μ΄ μ λ§λ‘ λλλ €μ ΈμΌ νλμ§ κΆκΈν©λλ€.
tags
Mustache.parse
λ₯Ό νΈμΆνλ€κ³ κ°μ νλ©΄ template
κ° μ΄λ¬ν κ΅¬λΆ κΈ°νΈλ₯Ό μ¬μ©νλ€κ³ κ°μ ν μλ μμ΅λλ€(BTW, "νκ·Έ" λ "ꡬλΆμ"λ μμ ν΄λ¦¬μ΄). κ·Έ λ€μμ μ°λ¦¬λ μ£Όμ΄μ§ template
κ° μ΄λ―Έ μΊμλμλμ§ μ¬λΆμ κ·Έλ¬ν κ²½μ° μ»΄νμΌλ λ°©λ²μ μκ΄μμ΄ Mustache.render
μ λν νΈμΆμ΄ μλν κ²μΌλ‘ μμλλ€κ³ κ°μ ν μ μμ΅λλ€. μ§κΈμ μ¬μ©μ μ μ tags
κ° μ¬μ©λλ κ²½μ° λ³΄μ₯λμ§ μμ΅λλ€.
@mbrodala λ€, λ§μ΅λλ€. Mustache.parse(template, ['[[', ']]']);
λ€μμ Mustache.parse(template, ['((', '))']);
κ° λ€λ°λ₯΄λ©΄ μ νν κ°μ κ²°κ³Όκ° λμ€λ κ²μ μ¬μ ν ββμμμΉ λͺ»ν μΌμ
λλ€.
λ€μμ λ°μ§λ§¨ μ루μ
/ννμ
λλ€("λ°μ§λ§¨"μ λ§μμ λ€μ§ μμ§λ§ λΈλ μΈμ€ν λ°ν κ°μΉκ° μκΈ° λλ¬Έμ
λλ€). template
λ¨λ
λ° νκ·Έ ν¬ν¨ template
λͺ¨λμ λν΄ parse
μΊμλ₯Ό κ°μ§ μ μμ΅λλ€. parse
κ° μ§μ λ tags
λ‘ νΈμΆλλ©΄ $ template
λ° tags
μ λν΄ μ‘°νλ₯Ό μνν©λλ€. tags
parse
λ₯Ό νΈμΆνλ render
λ₯Ό νΈμΆνλ©΄ template
λ§ μ‘°νν©λλ€. μκ°?
μλ¦¬κ° λ€λ¦¬μ§ μκ³ κΈ°λ³Έμ μΌλ‘ μμ μ¬νμ κ·Έλλ‘ μ μ§νλ©΄μμ΄ λ¬Έμ λ₯Ό ν΄κ²°ν κ²μ λλ€. λ΄ POVμμ νμΈν©λλ€.
@mbrodala λ tags
μ render
μ μ λ¬ν μ μλ€λ ν΅μ¬ λ¬Έμ μ
λκΉ? tags
맀κ°λ³μλ₯Ό render
μ μΆκ°ν μλ μμ΅λλ€.
@petrkoutnysw μ΄κ²λ λλ΅μ μΌλ‘ κ²ͺμλ λ¬Έμ μΈκ°μ?
μ μ΄λ parse()
μ render()
μ¬μ΄μ λΆμΌμΉμ
λλ€. μ€μ λ‘ render()
μ μ¬μ©μ μ μ νκ·Έλ₯Ό μ λ¬ν μ μλ€λ©΄ parse()
λ μ¬μ©νμ§ μμ κ²μ
λλ€. μ΄μ μ μ ν μΊμ±μ΄ μ΄λ£¨μ΄μ§λ©΄ μ΄κ²μ΄ λμ± λΆλͺ
ν΄μ§λλ€.
λ§μ νΌλμ μμ κΈ° μν΄ νκ·Έ 맀κ°λ³μλ₯Ό render()μ μΆκ°νλ λ° +1 -- μ°λ¦¬λ μ΄ λ³κ²½ μ¬νμλ μ½κ°μ μν₯μ λ°μκ³ λ§ν¬ b/w ꡬ문 λΆμ λ° λ λλ§μ νμ νμν κ²λ³΄λ€ μ½κ° λ λ§μ μ²λΌ 보μμ΅λλ€.
μ, κ·Έλ λ€λ©΄ λ²κ·Έ μμ 릴리μ€μμ μΊμ±μ λΉνμ±ννμ¬ μ¦κ°μ μΈ λ¬Έμ λ₯Ό μμ νκ³ μλ―Έλ‘ μ λ²μ κ΄λ¦¬λ₯Ό μ€μνκ³ λ€μ μ£Όμ 릴리μ€μμ tagsμ tags
λ₯Ό render
λ©μλμ λ€μ λμ
νλ κ²μ μ΄λ»μ΅λκΉ? (λ€μ λ§νμ§λ§, λλ λ΄κ° μ μν λ°μ§λ§¨ μ루μ
μ μ΄λ ¬ν ν¬μ΄ μλλλ€.)
μ² μ ν μ°μ΅ @raymond-lamμ κ°μ¬λ립λλ€!
μ λ μ μλ λ²κ·Έ μμ 릴리μ€μ κΈ°λκ³ μμ΅λλ€. μ£Όλ‘ semver λ¬Έμ μ μ΄λ¬ν λμ λ³κ²½μ΄ μμνμ§ λͺ»νμ¬ νλ‘μ νΈμ νΌλμ μ΄λν μ μλ νλ‘μ νΈ λλ¬Έμ λλ€.
κ³νλ λ€μ μ£Όμ 릴리μ€μμ μΊμ± λμμ λ€μ λμ νμ¬ λ¦΄λ¦¬μ€ μ 보μ λ§μ΄κ·Έλ μ΄μ μ§μΉ¨μ ν¬ν¨ν μ μμ΅λλ€.
@phillipj #643 λ° #664λ₯Ό λ‘€λ°±νλ pull request #670μ λ°ννμ΅λλ€. μΊμ±μ λͺ¨λ λΉνμ±ννλ λμ μν μνλ₯Ό μν΄ λ¨μν v2.3.0 λμ(λ²κ·Έ μμ 릴리μ€μμ)μΌλ‘ λμκ°λ κ²μ΄ Mustache v2.xxμ μ’ μλ μ¬λλ€μκ² κ°μ₯ μμ ν κ²μ²λΌ 보μ λλ€. μ£Όμ 릴리μ€μμ λ€μ λμ νκΈ° μν΄ λ λ€λ₯Έ ν 리νμ€νΈλ₯Ό λ°ννκ² μ΅λλ€.
@phillipj #671μ μ£Όμ 릴리μ€λ₯Ό κΈ°λ€λ¦¬κΈ° μν΄ μΊμ± μμ μ¬νμ λ€μ λμ ν©λλ€.
tags
λ₯Ό `render.xmlμ μΆκ°νλ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ λ¬Έμ #672λ₯Ό λ§λ€μμ΅λλ€.
μ΄ λ¬Έμ λ₯Ό μ‘°μ¬νκ³ μμ ν΄ μ£Όμ μ κ°μ¬ν©λλ€. π
@raymond-lamμκ² κ°μ¬μ μΈμ¬λ₯Ό μ ν©λλ€! μ¬λ¬λΆ λλΆμ μμμΉ λͺ»ν λ³νκ° μΈμ λ°μνλμ§ μ μ μμ΅λλ€.
v2.3.2 κ° μΆμλμμ΅λλ€ π