diff --git a/packages/ui/base.js b/packages/ui/base.js index 0cd29e2c8d..c1869a5ca8 100644 --- a/packages/ui/base.js +++ b/packages/ui/base.js @@ -298,7 +298,7 @@ _extend(UI.Component, { // XXX we don't really want this to be a user-visible callback, // it's just a particular signal we need from DomRange. -UI.Component.parented = function () { +UI.Component.notifyParented = function () { var self = this; for (var comp = self; comp; comp = comp._super) { var events = (comp.hasOwnProperty('_events') && comp._events) || null; @@ -336,10 +336,26 @@ UI.Component.parented = function () { }); } - // XXX think about this callback's timing + var updatedTemplateInstance = false; + + // XXX this is an undocumented callback + if (self.parented) { + Deps.nonreactive(function () { + if (! updatedTemplateInstance) { + updateTemplateInstance(self); + updatedTemplateInstance = true; + } + self.parented.call(self.templateInstance); + }); + } + + // XXX fix this callback's timing if (self.rendered) { Deps.nonreactive(function () { - updateTemplateInstance(self); + if (! updatedTemplateInstance) { + updateTemplateInstance(self); + updatedTemplateInstance = true; + } self.rendered.call(self.templateInstance); }); } diff --git a/packages/ui/domrange.js b/packages/ui/domrange.js index eeb48a951c..acb8b45b84 100644 --- a/packages/ui/domrange.js +++ b/packages/ui/domrange.js @@ -114,10 +114,8 @@ var rangeParented = function (range) { }); } - // XXX is this a real callback? what about chaining? etc. - if (range.component.parented) { - range.component.parented(); - } + if (range.component.notifyParented) + range.component.notifyParented(); // recurse on member ranges var members = range.members; diff --git a/packages/ui/each.js b/packages/ui/each.js index b81416a1cc..632cbf585f 100644 --- a/packages/ui/each.js +++ b/packages/ui/each.js @@ -6,8 +6,7 @@ UI.Each = Component.extend({ this.sequence = this.data; this.data = undefined; }, - // xcxc -> parented - rendered: function () { + parented: function () { var self = this.__component__; var range = self.dom;