From babc38ced030c715eaf2b82f1f4acc6725a7cb43 Mon Sep 17 00:00:00 2001 From: David Greenspan Date: Wed, 2 Jul 2014 21:08:39 -0700 Subject: [PATCH] Add DOMRange#destroy and UI.remove --- packages/blaze/domrange.js | 8 +++++++- packages/templating/templating.js | 10 ++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) 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__;