Skip to content

Commit

Permalink
Merge pull request #11266 from rwjblue/fix-parentView
Browse files Browse the repository at this point in the history
[BUGFIX beta] Ensure `parentView` includes yielding component.
  • Loading branch information
rwjblue committed May 25, 2015
2 parents d905afa + 0bf962d commit 2058034
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 1 deletion.
2 changes: 1 addition & 1 deletion packages/ember-htmlbars/lib/hooks/component.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ export default function componentHook(renderNode, env, scope, _tagName, params,
}

var read = env.hooks.getValue;
var parentView = read(env.view);
var parentView = read(scope.view);

var manager = ComponentNodeManager.create(renderNode, env, {
tagName,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -575,6 +575,44 @@ QUnit.test("comopnent should rerender when a property is changed during children

});

QUnit.test("components in template of a yielding component should have the proper parentView", function() {
var outer, innerTemplate, innerLayout;

registry.register('component:x-outer', Component.extend({
init() {
this._super(...arguments);
outer = this;
}
}));

registry.register('component:x-inner-in-template', Component.extend({
init() {
this._super(...arguments);
innerTemplate = this;
}
}));

registry.register('component:x-inner-in-layout', Component.extend({
init() {
this._super(...arguments);
innerLayout = this;
}
}));

registry.register('template:components/x-outer', compile('{{x-inner-in-layout}}{{yield}}'));

view = EmberView.extend({
template: compile('{{#x-outer}}{{x-inner-in-template}}{{/x-outer}}'),
container: container
}).create();

runAppend(view);

equal(innerTemplate.parentView, outer, 'receives the wrapping component as its parentView in template blocks');
equal(innerLayout.parentView, outer, 'receives the wrapping component as its parentView in layout');
equal(outer.parentView, view, 'x-outer receives the ambient scope as its parentView');
});

QUnit.test("comopnent should rerender when a property (with a default) is changed during children's rendering", function() {
expectDeprecation(/modified value twice in a single render/);

Expand Down

0 comments on commit 2058034

Please sign in to comment.