From f97708bf193cb169d34204d5ab787105095877ab Mon Sep 17 00:00:00 2001 From: David Greenspan Date: Mon, 10 Mar 2014 14:31:12 -0700 Subject: [PATCH] Fix nested autoruns in Blaze rendering Should address bugs where helpers fire more than expected, and also prevent wasted re-rendering of templates that are being destroyed anyway. See: https://github.com/EventedMind/iron-router/issues/478 --- packages/ui/render.js | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/packages/ui/render.js b/packages/ui/render.js index d985cc1d71..39dca400f5 100644 --- a/packages/ui/render.js +++ b/packages/ui/render.js @@ -243,13 +243,20 @@ var updateAttributes = function(elem, newAttrs, handlers) { UI.render = function (kind, parentComponent) { if (kind.isInited) throw new Error("Can't render component instance, only component kind"); - var inst = kind.instantiate(parentComponent); - var content = (inst.render && inst.render()); + var inst, content, range; - var range = new UI.DomRange; - inst.dom = range; - range.component = inst; + Deps.nonreactive(function () { + + inst = kind.instantiate(parentComponent); + + content = (inst.render && inst.render()); + + range = new UI.DomRange; + inst.dom = range; + range.component = inst; + + }); materialize(content, range, null, inst); @@ -346,9 +353,7 @@ var materialize = function (node, parent, before, parentComponent) { if (! c.firstRun) range.removeAll(); - Deps.nonreactive(function () { - materialize(content, range, null, parentComponent); - }); + materialize(content, range, null, parentComponent); } }); range.removed = function () {