๊ธฐ๋ณธ ์ ๊ณต ๋์ฐ๋ฏธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ๋ถ ๊ธฐํธ๊ฐ ์๋ ํญ๋ชฉ ๋ชฉ๋ก์ ์กฐ์ธํ๋ ๋ฐฉ๋ฒ์ ์ฐพ์ง ๋ชปํ์ต๋๋ค. ์ด ์์ ์ ์ํํ ์ ์๋ ๊ธฐ๋ณธ ์ ๊ณต ๋์ฐ๋ฏธ ๋๋ ๊ธฐ๋ณธ ์ ๊ณต ๋์ฐ๋ฏธ์ ์กฐํฉ์ด ์ด๋ฏธ ์๋ ๊ฒฝ์ฐ ์๋ ค์ฃผ์ญ์์ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๊ตฌ๋ถ ๊ธฐํธ์ ๋ํ ๋งค๊ฐ ๋ณ์๊ฐ ์๋ "join"์ด๋ผ๋ ๊ธฐ๋ณธ ์ ๊ณต ๋์ฐ๋ฏธ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์๋ฅผ ๋ค์ด ํ ํ๋ฆฟ์๋ ๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ด ํฌํจ๋ฉ๋๋ค.
{{join myArray delimiter=", "}}
๋๋ ๋ด ์ฆ๊ฐ์ ์ธ ํ์๋ฅผ ์ํด ๋ด ์์ ์ ๋์ฐ๋ฏธ๋ฅผ ๋ฑ๋กํ๊ฒ ๋์์ต๋๋ค.
Handlebars.registerHelper("join", function(context, block) {
return context.join(block.hash.delimiter);
});
์ปจํ ์คํธ๊ฐ null, ์ปจํ ์คํธ๊ฐ ๋ฐฐ์ด์ด ์๋ ๊ฒฝ์ฐ, ๊ตฌ๋ถ ๊ธฐํธ๊ฐ null์ธ ๊ฒฝ์ฐ ๋ฑ์ ์ฒ๋ฆฌํ๋๋ก ์์ ํด์ผ ํฉ๋๋ค.
๋๋ ์ค๋ ๋ ์์ ์ ์ํด ์ด๊ฒ์ ํ๋ค:
Handlebars.registerHelper('join', function(val, delimiter, start, end) {
return [].concat(val).slice(start, end).join(delimiter);
});
val์ด ๋ฐฐ์ด์ด ์๋ ๊ฒฝ์ฐ val์ ๋ฐํํ๋ ํจ๊ณผ๊ฐ ์์ต๋๋ค. 2~4๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ ์์ ํ ์ ํ ์ฌํญ์ ๋๋ค(๊ธฐ๋ณธ ๊ตฌ๋ถ ๊ธฐํธ๋ ","). ์ง๊ธ๊น์ง Chrome์์๋ง ํ ์คํธํ์ต๋๋ค.
์
๋ฐ์ดํธ: ์ด๊ฒ์ IE8์์ ์ค๋จ๋ฉ๋๋ค. [...].slice(undefined, undefined)
๋ ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ์์์ฒ๋ผ ์ ์ฒด ๋ฐฐ์ด์ด ์๋ ๋น ๋ฐฐ์ด์ ๋ฐํํฉ๋๋ค. ๋ํ ํ
ํ๋ฆฟ ์ ์์ ๊ตฌ๋ถ ๊ธฐํธ๋ฅผ ์ ๊ณตํ์ง ์์ผ๋ฉด Handlebars๋ ํด์ ๊ฐ์ฒด๋ฅผ ๊ตฌ๋ถ ๊ธฐํธ๋ก ์ ๋ฌํฉ๋๋ค. ์ด ๊ตฌ๋ถ ๊ธฐํธ๋ IE๊ฐ ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ์ฒ๋ผ ์ผํ๊ฐ ์๋ '[Object]'๋ก ๋ ๋๋ง๋ฉ๋๋ค. ์์ ๋ ๋ฒ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Handlebars.registerHelper('join', function(val, delimiter, start, end) {
var arry = [].concat(val);
delimiter = ( typeof delimiter == "string" ? delimiter : ',' );
start = start || 0;
end = ( end === undefined ? arry.length : end );
return arry.slice(start, end).join(delimiter);
});
๊ฐ๊ฒฐํ๊ฒ ์ฐ์ํ์ง๋ ์์ง๋ง ์ ๋ ฅ์ ์จ์ ํ ์ํ๋ก ํ์ธํ๋ ๊ฒ์ ์๋ง๋ ์ข์ ์ต๊ด์ผ ๊ฒ์ ๋๋ค.
--์ฐจ๋
๋๋ ceberle์ ์ ์์ ํตํฉํ์ต๋๋ค.
//Handlebars "join" block helper that supports arrays of objects or strings.
//If "delimiter" is not speficified, then it defaults to ",". You can use "start",
//and "end" to do a "slice" of the array.
Handlebars.registerHelper('join', function(items, block) {
var delimiter = block.hash.delimiter || ",",
start = start = block.hash.start || 0,
len = items ? items.length : 0,
end = block.hash.end || len,
out = "";
if(end > len) end = len;
if ('function' === typeof block) {
for (i = start; i < end; i++) {
if (i > start) out += delimiter;
out += block(items[i]);
if('string' === typeof items[i])
out += items[i];
else
out += block(items[i]);
}
return out;
} else {
return [].concat(items).slice(start, end).join(delimiter);
}
});
์ฃ์กํฉ๋๋ค. ํ ์ค๋ง ๋นผ๋ ค๊ณ ํ์ต๋๋ค.
//Handlebars "join" block helper that supports arrays of objects or strings.
//If "delimiter" is not speficified, then it defaults to ",". You can use "start",
//and "end" to do a "slice" of the array.
Handlebars.registerHelper('join', function(items, block) {
var delimiter = block.hash.delimiter || ",",
start = start = block.hash.start || 0,
len = items ? items.length : 0,
end = block.hash.end || len,
out = "";
if(end > len) end = len;
if ('function' === typeof block) {
for (i = start; i < end; i++) {
if (i > start)
out += delimiter;
if('string' === typeof items[i])
out += items[i];
else
out += block(items[i]);
}
return out;
} else {
return [].concat(items).slice(start, end).join(delimiter);
}
});
@jlubean : ์ด๋ค ๋ฒ์ ์ ํธ๋ค๋ฐ๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๊น? ๋ฒ ํ 4๊น์ง ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ ๋ ๋ค์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
{{join list_of_words delimiter=","}}
์ค๋ฅ:
Uncaught Error: Parse error on line 35:
..._of_words delimiter=","}}</tex
-----------------------^
Expecting 'STRING', 'INTEGER', 'BOOLEAN', 'ID'
์ ๋ ๋ฒ ํ 3๋ฅผ ์ฌ์ฉํ๊ณ ์์์ต๋๋ค. http://jsfiddle.net/jlubean/YS3EV/ ์์ ์ ์์ ์์ ๋ฅผ ์ดํด๋ณด์ธ์.
๋๋ ์ด๊ฒ์ ์ผ๋ค: http://mametipsum.herokuapp.com/. ๋๋ ์ฌ๋๋ค์ด ์ด์ ๊ฐ์ ๋์ฐ๋ฏธ๋ฅผ ์ง์ ํ์ง ์์๋ ๋๋๋ก ํ๊ณ ์ถ์ต๋๋ค("ํ ํ๋ฆฟ" ํญ ์ฐธ์กฐ). ๋๋ ๊ทธ๊ฒ์ ๊ฐ๋จํ๊ฒ ์ ์งํ๊ณ ์ถ์ต๋๋ค. ๋ฐฐ์ด์ ์ธ์ํ ๋ ๊ณต๋ฐฑ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ํ๊ณ ์ถ์ต๋๋ค. ๊ธฐ๋ณธ ๋ฐฐ์ด ๋์ฐ๋ฏธ๋ฅผ ์ฌ์ ์ํ๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค. ํ์ง๋ง ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น? ๊ฐ์ฌ ํด์.
๊ฐ์ธ์ ์ผ๋ก ํธ๋ค๋ฐ๋ ๋จ์ํ๊ฒ ์ ์งํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค. ๋๊ตฐ๊ฐ๊ฐ ์ ์ฉํ ๋์ฐ๋ฏธ์ ํจ๊ป repo/gist๋ฅผ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด ๋งํฌํ๊ฑฐ๋ ๊ฐ์กฐ ํ์ํ ์ ์์ต๋๋ค.
๋ ธ๋์ ๊ฒฝ์ฐ:
Handlebars.registerHelper( "join", function( array, sep, options ) {
return array.map(function( item ) {
return options.fn( item );
}).join( sep );
});
<p>
{{#join companies "<br>"}}
{{name}}
{{/join}}
</p>
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ ธ๋์ ๊ฒฝ์ฐ: