From 284529992ed06e5c4e4cbd874ef09d97a1e76296 Mon Sep 17 00:00:00 2001 From: David Greenspan Date: Tue, 1 Jul 2014 10:25:48 -0700 Subject: [PATCH] Fix UI.contentBlock data context --- packages/blaze/view.js | 13 +++++++++++-- packages/spacebars-compiler/codegen.js | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/packages/blaze/view.js b/packages/blaze/view.js index 122b904aae..5c3f2c9c21 100644 --- a/packages/blaze/view.js +++ b/packages/blaze/view.js @@ -617,8 +617,17 @@ Blaze.Each = function (argFunc, contentFunc, elseFunc) { return eachView; }; -Blaze.SetParentView = function (parentView, contentFunc) { - var view = Blaze.View('SetParentView', contentFunc); +Blaze.InOuterTemplateScope = function (templateView, contentFunc) { + var view = Blaze.View('InOuterTemplateScope', contentFunc); + var parentView = templateView.parentView; + + // Hack so that if you call `{{> foo bar}}` and it expands into + // `{{#with bar}}{{> foo}}{{/with}}`, and then `foo` is a template + // that inserts `{{> UI.contentBlock}}`, the data context for + // `UI.contentBlock` is not `bar` but the one enclosing that. + if (parentView.__isTemplateWith) + parentView = parentView.parentView; + view.onCreated(function () { this.parentView = parentView; }); diff --git a/packages/spacebars-compiler/codegen.js b/packages/spacebars-compiler/codegen.js index be8d39eee6..a360cd2ef7 100644 --- a/packages/spacebars-compiler/codegen.js +++ b/packages/spacebars-compiler/codegen.js @@ -133,7 +133,7 @@ _.extend(CodeGen.prototype, { if (path[0] === 'UI' && (path[1] === 'contentBlock' || path[1] === 'elseBlock')) { - includeCode = 'Blaze.SetParentView(view, function () { return ' + includeCode = 'Blaze.InOuterTemplateScope(view, function () { return ' + includeCode + '; })'; }