diff --git a/packages/blaze/domrange.js b/packages/blaze/domrange.js index 28a1a67afc..0108bf6c3f 100644 --- a/packages/blaze/domrange.js +++ b/packages/blaze/domrange.js @@ -276,7 +276,7 @@ DOMRange.prototype._memberIn = function (m) { m.$blaze_range = this; }; -DOMRange.prototype._memberOut = function (m, _skipNodes) { +DOMRange._destroy = function (m, _skipNodes) { if (m instanceof DOMRange) { if (m.view) Blaze.destroyView(m.view, _skipNodes); @@ -290,6 +290,8 @@ DOMRange.prototype._memberOut = function (m, _skipNodes) { } }; +DOMRange.prototype._memberOut = DOMRange._destroy; + // Tear down, but don't remove, the members. Used when chunks // of DOM are being torn down or replaced. DOMRange.prototype.destroyMembers = function (_skipNodes) { @@ -298,6 +300,10 @@ DOMRange.prototype.destroyMembers = function (_skipNodes) { this._memberOut(members[i], _skipNodes); }; +DOMRange.prototype.destroy = function (_skipNodes) { + DOMRange._destroy(this, _skipNodes); +}; + DOMRange.prototype.containsElement = function (elem) { if (! this.attached) throw new Error("Must be attached"); diff --git a/packages/templating/templating.js b/packages/templating/templating.js index 81b9e9ecf9..837c29f160 100644 --- a/packages/templating/templating.js +++ b/packages/templating/templating.js @@ -248,4 +248,14 @@ UI.insert = function (range, parentElement, nextNode) { range.attach(parentElement, nextNode); }; +// XXX test and document +UI.remove = function (range) { + if (! range instanceof Blaze.DOMRange) + throw new Error("Expected template rendered with UI.render"); + + if (range.attached) + range.detach(); + range.destroy(); +}; + UI.body = Template.__body__;