{{ helper1 helper2 text }}
μ κ°μ΄ λλλ‘ ν λͺ
μ λμ°λ―Έλ§μΌλ‘λ μμ
μ μννκΈ°μ μΆ©λΆνμ§ μλ€λ κ²μ μκ³ μμ΅λλ€.
{{headerText {{getTitle "my_page"}}}}
μ κ°μ΄ ννμμ μ€μ²©νλ λ°©λ²μ΄ νμνλ€κ³ μκ°ν©λλ€.
νμ¬ μ§μλμ§ μμΌλ©° μ§μν κ³νλ μμ΅λλ€.
κ·Έλ¬λ μ΄λ‘ μ μΌλ‘ λ€λ₯Έ λμ°λ―Έλ₯Ό μλμ μΌλ‘ μλΉνκ³ μ°κ²°νλ λμ°λ―Έλ₯Ό λ§λ€ μ μμ΅λλ€.
{{chain "helper1" "helper2" text}}
λκ΅°κ° κ΄μ¬μ΄ μλ€λ©΄ λ€μκ³Ό κ°μ λμ°λ―Έλ₯Ό λ§λ€μμ΅λλ€.
Handlebars.registerHelper('chain', function () {
var helpers = [], value;
$.each(arguments, function (i, arg) {
if (Handlebars.helpers[arg]) {
helpers.push(Handlebars.helpers[arg]);
} else {
value = arg;
$.each(helpers, function (j, helper) {
value = helper(value, arguments[i + 1]);
});
return false;
}
});
return value;
});
λ€μκ³Ό κ°μ΄ μλν©λλ€.
{{chain "taxAdd" "formatPrice" this.product.price}}
jQueryμ μ’ μμ±μ λμ νλ @Znarcus
@jrajan μ λ jQuery.each
λ§ μ¬μ©νμ΅λλ€. μνλ λλ‘ μμ λ‘κ² λ€μ μμ±νμΈμ.
λꡬλ μ§ jQuery λΆκ°μ§λ‘ μ λ²μ μ κ΄μ¬μ΄ μλ€λ©΄:
Handlebars.registerHelper('chain', function() {
var helpers = [];
var args = Array.prototype.slice.call(arguments);
var argsLength = args.length;
var index;
var arg;
for (index = 0, arg = args[index];
index < argsLength;
arg = args[++index]) {
if (Handlebars.helpers[arg]) {
helpers.push(Handlebars.helpers[arg]);
} else {
args = args.slice(index);
break;
}
}
while (helpers.length) {
args = [helpers.pop().apply(Handlebars.helpers, args)];
}
return args.shift();
});
λ ꡬνμ ν κ°μ§ λ¬Έμ λ μ£Όλͺ©ν κ°μΉκ° μμ΅λλ€. μΈμ μ€ νλκ° λμ°λ―Έμ μ λ¬λλ κ°μΌλ‘ μλλμμ§λ§ κΈ°μ‘΄ λμ°λ―Έμ μ΄λ¦κ³Ό μΌμΉνλ λ¬Έμμ΄(κ°μ κ°λ₯)μΈ κ²½μ° μκΈ°μΉ μμ κ²°κ³Όκ° λ°μν©λλ€.
λ€μμ λ κ°μ§ ꡬνμ
λλ€. λ λ€ μ΄μ μμ μ λ¬λ¦¬ κ° λμ°λ―Έμ μ¬λ¬ μΈμλ₯Ό λ³΄λΌ μ μμ΅λλ€.
κ·Έλ€μ λν μ»€νΌ μ€ν¬λ¦½νΈλ‘ μμ±λμμΌλ©° λ°μ€ λλ lodashμ μμ‘΄ν©λλ€.
첫 λ²μ§Έλ λ€μκ³Ό κ°μ΄ ν μ μμ΅λλ€.
{{{chain 'join-strings' 'link-twitter-handles' '@' twitterUsername}}}
κ·Έλ¬λ λ€μκ³Ό κ°μ κ²½μ° μκΈ°μΉ μμ κ²°κ³Όκ° λ°μν©λλ€.
{{{chain 'join-strings' 'link-twitter-handles' '@' 'join-strings' twitterUsername}}}
Handlebars.registerHelper 'chain', ->
# Get rid of the options hash
args = Array.prototype.slice.call arguments, 0, -1
helpers = []
argsForHelpers = null
value = undefined
_.each args, (arg, i) ->
if Handlebars.helpers[arg]
helpers.push Handlebars.helpers[arg]
else if not value # Only call the helpers once
value = arg
unless argsForHelpers
argsForHelpers = args[i+1..-1]
argsForHelpers.unshift value
_.each helpers, (helper) ->
argsForHelpers[0] = value
value = helper.apply null, argsForHelpers
value
μ΄ λ λ²μ§Έ μμλ chain
κ° μΈμμμ λμ°λ―Έλ₯Ό λΆν ν μ μλ κ΅¬λΆ κΈ°νΈκ° μμ΅λλ€.
λμ°λ―Έλ κ΅¬λΆ κΈ°νΈ μμ λͺ¨λ μΈμκ° λμ°λ―Έμ΄κ³ λ€λ₯Έ λͺ¨λ μΈμλ λμ°λ―Έμ λν μΈμλ‘ μ λ¬λμ΄μΌ νλ€κ³ κ°μ ν©λλ€.
Handlebars.registerHelper 'chain', ->
# Get rid of the options hash
args = Array.prototype.slice.call arguments, 0, -1
helpers = []
for arg,i in args
if arg is '--'
argsForHelpers = args.slice i + 1
value = argsForHelpers[0]
break
else
helpers.push Handlebars.helpers[arg]
_.each helpers, (helper) ->
argsForHelpers[0] = value
value = helper.apply null, argsForHelpers
value
μ£Όμ΄μ§ ν
νλ¦Ώ:
{{{chain 'join-strings' 'link-twitter-handles' '@' 'join-strings' twitterUsername}}}
κ·Έλ¦¬κ³ μ΄ κ°μ²΄:
{twitterUsername: 'abc'}
λ€μκ³Ό κ°μ΄ μ»΄νμΌλ ν
νλ¦Ώμ κΈ°λν μ μμ΅λλ€.
<a href="https://twitter.com/join-stringsabc">@join-stringsabc</a>
@cdata μ ꡬνμ κ°μ Έ
/**
* Takes an arbitrary number of arguments, the first of which is the operation type 'AND' or 'OR'.
* Following that will be a list of block helper names prefixed by '!!'.
* Calls each block helper with the remaining arguments.
*
* <strong i="7">@returns</strong> {string} returns options.fn(this) or options.inverse(this) depending on result of each helper and operation type
*/
Handlebars.registerHelper('chainBlockHelpers', function() {
var index, arg, helperResult, pass,
helpers = [],
args = Array.prototype.slice.call(arguments),
argsLength = args.length,
options = args[argsLength-1],
operation = args.shift(),
passVal = options.fn(this),
failVal = options.inverse(this);
if (operation !== 'AND' && operation !== 'OR')
throw new Error ('chainBlockHelpers only supports "AND" or "OR" operations.')
for (index = 0, arg = args[index]; index < argsLength; arg = args[++index]) {
if (typeof arg == 'string' && arg.startsWith('!!') && Handlebars.helpers[arg.substr(2)]) {
helpers.push(Handlebars.helpers[arg.substr(2)]);
} else {
args = args.slice(index);
break;
}
}
if (operation === 'AND') {
pass = true;
while (helpers.length) {
helperResult = helpers.pop().apply(Handlebars.helpers, args);
if (helperResult == failVal) {
pass = false;
break;
}
}
} else {
pass = false;
while (helpers.length) {
helperResult = helpers.pop().apply(Handlebars.helpers, args);
if (helperResult == passVal) {
pass = true;
break;
}
}
}
return pass ? passVal : failVal;
});
μ΄κ²μ λ€μκ³Ό κ°μ κ²μ μ¬μ©νμ¬ κΈ°λ³Έμ μΌλ‘ μ§μνλ κ²μΌλ‘ 보μ λλ€.
{{ helper1 (helper2 text) }}
κ²½μ°μ λ°λΌ λμ°λ―Έκ° λ€μκ³Ό κ°μ΄ μλνλλ‘ ν μ μμ΅λλ€.
{{#helper1}}{{helper2}}content{{/helper2}}{{/helper1}}
@Znarkus κ·νμ λ°©λ²μ μ¬μ©νμ¬ μμ ν λ¬Έμμ΄μ΄ μ μ©λ λ λμ°λ―Έλ₯Ό μ λ¬νλ©΄ μ½λκ° μ€λ¨λ©λλ€. λ°μ΄ν°λ₯Ό μ²μ μ λ¬ν λ λ¬Έμμ΄λ‘ μμ λμ§λ§ μ λ¬λλ κ°μ΄ κ°μ²΄μΈ κ²μ²λΌ 보μ΄λ λ λ²μ§Έ νν°λ 무μμ λκΉ? λ΄ λλ²κ±°μμλ 'μ€ λ°κΏ μμ λ° λ¬Έμμ΄:'λ΄ κ°'μΌλ‘ νμλ©λλ€. SafeStringμ΄ κ°μ λν΄ μννλ μμ μ νμ€νμ§ μμ§λ§ λ λ² μ λ¬νλ©΄ μ λλ‘ μλνμ§ μλ κ² κ°μ΅λλ€.
Handlebars.registerHelper('shortNumber', function (value) {
//return new Handlebars.SafeString(iSpot.number.shortNumber(value)); // Breaks
return iSpot.number.shortNumber(value); // Works
});
Handlebars.registerHelper('asDollars', function (value) {
//return new Handlebars.SafeString(iSpot.number.asDollars(value)); // Breaks
return iSpot.number.asDollars(value); // Works
});
+1 @amwmedia μ κ·Ό λ°©μ - {{pluralize (titleize (humanize schema.name))}}
λ©μ§ κΉ¨λν ꡬ문μ²λΌ 보μ΄λ +1.
+1 @amwmedia μλ²½νκ² μλν©λλ€ κ°μ¬ν©λλ€
@breandr / @amwmedia μ κ·Ό λ°©μμ 맀λ ₯μ²λΌ μλνμ§λ§ μμμ μΈκΈν @cssagogo μ²λΌ Handlebars.SafeString()
κ° μμ΅λλ€ .
κ·Έλμ λΉμ μ smthλ₯Ό ν μ μμ΅λλ€. μ²λΌ:
{{> partial text=(concat value (default extension 'PDF')) }}
κ°μ¬
λλμ΄ λ¬Έμ μ μ§μ λΆλͺμ³€λ€. λλ μ΄κ²μ μ λ§ λ¦μλ€λ κ²μ μκ³ μμ§λ§ μ μκ² ν¨κ³Όμ μΈ ν΄κ²°μ± μ΄ μμ΅λλ€. μ΄κ²μ΄ μ΄λ―Έ μΈκΈλ κ²½μ° μ©μν΄ μ£Όμμμ€(νμΈν μκ°μ΄ μμμ΅λλ€). μ΄κ²μ κ°μ₯ λ©μ§ μ루μ μ΄ μλλ©° κΈ°μ μ μΌλ‘ κ·νμ μ§λ¬Έμ λν μ§μ μ μΈ λ΅λ³μ μλμ§λ§ λ¬Έμ μ λν μ루μ μ λλ€(νλμ κ°μμ μ¬λ¬ κΈ°λ₯ μ€ν).
λͺ¨λ λμ°λ―Έ κΈ°λ₯μ λ³λμ νμΌμ 보κ΄ν©λλ€. κ·Έκ²λ€μ λͺ¨λ κ°μ μμΉμ μκΈ° λλ¬Έμ ν λμ°λ―Έμκ² κ°μ μ λ¬ν λ€μ λμ°λ―Έ ν¨μμ νμΌμ μλ λ€λ₯Έ λͺ¨λ ν¨μλ₯Ό νΈμΆν μ μμ΅λλ€. κ·Έλμ:
{{ function1 value }}
λμ°λ―Έ νμΌ
function2 (value) {
// code
}
function1 (value) {
// code
function2(value)
// code
return value;
}
λ¬Όλ‘ μ΄κ²μ μνλ λ§νΌ λ§μ κΈ°λ₯μ μ¬μ©ν μ μλ κ°λ¨ν λ°©λ²μ λλ€. "체μ΄λ" μν μ νλ κΈ°λ³Έ κΈ°λ₯μ μ§μ ν μλ μμ΅λλ€.
{{ chainer value }}
λμ°λ―Έ νμΌ
function1 (value) {
// code
}
function2 (value) {
// code
}
function3 (value) {
// code
}
function4 (value) {
// code
}
function chainer(value) {
function1(value)
function2(value)
function3(value)
function4(value)
return value;
}
λλ μ΄κ²μ μ§μ νμ§ μμμ§λ§ κ·Έκ²μ΄ μλνμ§ μλ μ΄μ λ₯Ό λͺ¨λ₯΄κ² μ΅λλ€.
μ°Έκ³ HTMLμμ μ¬μ©νλ €λ ν¨μλ₯Ό νΈλ€λ° λμ°λ―Έλ‘ λ±λ‘νκΈ°λ§ νλ©΄ λ©λλ€. λλ κ°μΈμ μΌλ‘ μλ‘ λ 립μ μΌλ‘ μ¬μ©νκΈ° λλ¬Έμ λ΄ λͺ¨λ κ²μ λ±λ‘νμ§λ§ μ§μ μ¬μ©ν νμκ° μλ€κ³ μκ°νμ§ μμΌλ©΄ λ±λ‘νμ§ μμλ λ©λλ€.
μ μ°¨μ νλ‘κ·Έλλ°μΌλ‘μ νκ· :)
κ°μ₯ μ μ©ν λκΈ
μ΄κ²μ λ€μκ³Ό κ°μ κ²μ μ¬μ©νμ¬ κΈ°λ³Έμ μΌλ‘ μ§μνλ κ²μΌλ‘ 보μ λλ€.
{{ helper1 (helper2 text) }}