allow string keys

This commit is contained in:
Leo Horie 2016-01-27 11:22:01 -05:00
parent 5003c0ac23
commit 3de5cb8aaf
2 changed files with 37 additions and 3 deletions

View file

@ -442,11 +442,10 @@ var m = (function app(window, undefined) {
function checkView(data, view, cached, cachedControllers, controllers, views) {
var controller = getController(cached.views, view, cachedControllers, data.controller);
//Faster to coerce to number and check for NaN
var key = +(data && data.attrs && data.attrs.key);
var key = data && data.attrs && data.attrs.key;
data = pendingRequests === 0 || forcing || cachedControllers && cachedControllers.indexOf(controller) > -1 ? data.view(controller) : {tag: "placeholder"};
if (data.subtree === "retain") return data;
if (key === key) (data.attrs = data.attrs || {}).key = key;
(data.attrs = data.attrs || {}).key = key;
updateLists(views, controllers, view, controller);
return data;
}

View file

@ -269,6 +269,41 @@ function testMithril(mock) {
return firstBefore === firstAfter
})
test(function() {
//string keys in components should work
mock.requestAnimationFrame.$resolve()
var root = mock.document.createElement("div")
var list = [1, 2, 3]
var component = {
controller: function() {},
view: function() {
return list.map(function(i) {
return m.component(sub, {key: "key" + i})
})
}
}
var sub = {
controller: function() {},
view: function() {
return m("div")
}
}
m.mount(root, component)
var firstBefore = root.childNodes[0]
mock.requestAnimationFrame.$resolve()
list.reverse()
m.redraw(true)
mock.requestAnimationFrame.$resolve()
var firstAfter = root.childNodes[2]
return firstBefore === firstAfter
})
test(function() {
//keys in subcomponents should work
mock.requestAnimationFrame.$resolve()