diff --git a/mithril.js b/mithril.js index 9a8be835..b2b59599 100644 --- a/mithril.js +++ b/mithril.js @@ -80,7 +80,7 @@ Mithril = m = new function app(window) { } } var actions = Object.keys(existing).map(function(key) {return existing[key]}) - var changes = actions.sort(function(a, b) {return a.action - b.action || b.index - a.index}) + var changes = actions.sort(function(a, b) {return a.action - b.action || a.index - b.index}) var newCached = cached.slice() for (var i = 0, change; change = changes[i]; i++) { @@ -90,7 +90,7 @@ Mithril = m = new function app(window) { } if (change.action == INSERTION) { var dummy = window.document.createElement("div") - dummy.key = data[change.index].attrs.key.toString() + dummy.key = data[change.index].attrs.key parentElement.insertBefore(dummy, parentElement.childNodes[change.index]) newCached.splice(change.index, 0, {attrs: {key: data[change.index].attrs.key}, nodes: [dummy]}) } diff --git a/tests/mithril-tests.js b/tests/mithril-tests.js index 4f6bd6a6..b0d54648 100644 --- a/tests/mithril-tests.js +++ b/tests/mithril-tests.js @@ -678,6 +678,13 @@ function testMithril(mock) { ])) return root.childNodes[0].childNodes[8].nodeName == "SPAN" }) + test(function() { + //https://github.com/lhorie/mithril.js/issues/157 + var root = mock.document.createElement("div") + m.render(root, m("ul", [m("li", {key: 0}), m("li", {key: 2}), m("li", {key: 4})])) + m.render(root, m("ul", [m("li", {key: 0}), m("li", {key: 1}), m("li", {key: 2}), m("li", {key: 3}), m("li", {key: 4}), m("li", {key: 5})])) + return root.childNodes[0].childNodes.map(function(n) {return n.key}).join("") == "012345" + }) //end m.render //m.redraw