diff --git a/render/render.js b/render/render.js index 5203f9ce..38aec09d 100644 --- a/render/render.js +++ b/render/render.js @@ -243,7 +243,8 @@ module.exports = function($window) { vnode.instance = Node.normalize(vnode.tag.view.call(vnode.state, vnode)) updateLifecycle(vnode.tag, vnode, hooks, recycling) if (vnode.instance != null) { - updateNode(parent, old.instance, vnode.instance, hooks, nextSibling, recycling, ns) + if (old.instance == null) insertNode(parent, createNode(vnode.instance, hooks, ns), nextSibling) + else updateNode(parent, old.instance, vnode.instance, hooks, nextSibling, recycling, ns) vnode.dom = vnode.instance.dom vnode.domSize = vnode.instance.domSize } diff --git a/render/tests/test-component.js b/render/tests/test-component.js index 1b51d8e0..559da03e 100644 --- a/render/tests/test-component.js +++ b/render/tests/test-component.js @@ -54,6 +54,32 @@ o.spec("component", function() { o(root.firstChild.attributes["id"].nodeValue).equals("c") o(root.firstChild.firstChild.nodeValue).equals("d") }) + o("updates from null", function() { + var visible = false + var component = { + view: function(vnode) { + return visible ? {tag: "div"} : null + } + } + render(root, [{tag: component}]) + visible = true + render(root, [{tag: component}]) + + o(root.firstChild.nodeName).equals("DIV") + }) + o("updates from primitive", function() { + var visible = false + var component = { + view: function(vnode) { + return visible ? {tag: "div"} : false + } + } + render(root, [{tag: component}]) + visible = true + render(root, [{tag: component}]) + + o(root.firstChild.nodeName).equals("DIV") + }) o("removes", function() { var component = { view: function(vnode) {