Handlebars.js包含部分内容,您可以使用<script>
模板代码段和registerPartial
的Javascript调用单独定义和注册。我发现这很麻烦,我更喜欢定义宏的Jinja风格,你可以使用相同的模板语言。
那里有帮手让我做这样的事情:
{{#macro macro-name}}
This is {{ bar }} and this is {{ foo }}
{{/macro}}
{{macro-name bar="BAR"}} {{! foo would be searched in the outer context}}
我没有运气搜索过。
答案 0 :(得分:6)
好的,经过几个小时阅读部分内容并摸不着头脑后,我想出了这个:
Handlebars.registerHelper('macro', function (name, defaults) {
// The following helper will be registered with the name
// given as the first parameter of the macro helper.
// Upon invocation, variables will be looked up in the
// following order: invocation arguments, default values
// given in the macro definition (stored in defaults.hash),
// and finally in the invocation context.
Handlebars.registerHelper(name, function (options) {
// options.hash has the parameters passed to
// the defined helper in invocation, who
// override the default parameters and the current context.
var e = $.extend(this, defaults.hash, options.hash);
// and here's where all the magic happens:
return new Handlebars.SafeString(defaults.fn(e));
});
});
您可以像这样定义一个宏:
{{#macro "macro-name" param1="bar" param2="" param3="egg"}}
{{ param1 }}
{{#each param2 }}
{{ param3 }}
{{ some_value }} {{! this one is looked up in the current context }}
{{/each}}
{{/macro}}
并像这样调用它:
{{macro-name param1="foo" param2=some_array_in_context}}
定义的第一个参数是宏名称。所有其他参数必须采用param = value格式。
我现在用了几个小时。我发现了一些错误,但修复了它们,我发现它很有用。令我惊讶的是最终代码的结果有多少。真正神奇的部分是你可以使用帮助器不返回字符串,而是定义一个新的帮助器。
它需要jQuery,但是嘿,什么不是: - )
答案 1 :(得分:0)
当前完成此操作的方法是使用partials。您可以以编程方式或在模板中使用内联部分定义这些内容:
{{#*inline "myPartial"}}
{{param1}}
{{/macro}}
{{> myPartial param1="foo" }}