summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/handlebars/runtime.js7
-rw-r--r--spec/partials.js23
2 files changed, 29 insertions, 1 deletions
diff --git a/lib/handlebars/runtime.js b/lib/handlebars/runtime.js
index 55eb1c1..7426f1f 100644
--- a/lib/handlebars/runtime.js
+++ b/lib/handlebars/runtime.js
@@ -197,7 +197,12 @@ export function wrapProgram(container, i, fn, data, declaredBlockParams, blockPa
export function resolvePartial(partial, context, options) {
if (!partial) {
if (options.name === '@partial-block') {
- partial = options.data['partial-block'];
+ let data = options.data;
+ while (data['partial-block'] === noop) {
+ data = data._parent;
+ }
+ partial = data['partial-block'];
+ data['partial-block'] = noop;
} else {
partial = options.partials[options.name];
}
diff --git a/spec/partials.js b/spec/partials.js
index d3ead74..d6baba5 100644
--- a/spec/partials.js
+++ b/spec/partials.js
@@ -270,6 +270,20 @@ describe('partials', function() {
true,
'success');
});
+ it('should render nested partial blocks', function() {
+ shouldCompileToWithPartials(
+ '<template>{{#> outer}}{{value}}{{/outer}}</template>',
+ [
+ {value: 'success'},
+ {},
+ {
+ outer: '<outer>{{#> nested}}<outer-block>{{> @partial-block}}</outer-block>{{/nested}}</outer>',
+ nested: '<nested>{{> @partial-block}}</nested>'
+ }
+ ],
+ true,
+ '<template><outer><nested><outer-block>success</outer-block></nested></outer></template>');
+ });
});
describe('inline partials', function() {
@@ -309,6 +323,15 @@ describe('partials', function() {
true,
'success');
});
+ it('should render nested inline partials', function() {
+ shouldCompileToWithPartials(
+ '{{#*inline "outer"}}{{#>inner}}<outer-block>{{>@partial-block}}</outer-block>{{/inner}}{{/inline}}' +
+ '{{#*inline "inner"}}<inner>{{>@partial-block}}</inner>{{/inline}}' +
+ '{{#>outer}}{{value}}{{/outer}}',
+ [{value: 'success'}, {}, {}],
+ true,
+ '<inner><outer-block>success</outer-block></inner>');
+ });
});
it('should pass compiler flags', function() {