diff --git a/mithril.js b/mithril.js index b59438c2..a62507ff 100644 --- a/mithril.js +++ b/mithril.js @@ -96,7 +96,7 @@ Mithril = m = new function app(window) { cached.nodes.intact = true if (shouldReattach === true) parentElement.insertBefore(node, parentElement.childNodes[index] || null) } - if (type.call(data.attrs["config"]) == "[object Function]") data.attrs["config"](node, !isNew) + if (type.call(data.attrs["config"]) == "[object Function]") data.attrs["config"](node, !isNew, cached.config_context=cached.config_context || {}) } else { var node diff --git a/tests/e2e/tests.js b/tests/e2e/tests.js index a8c03e3d..c9ecbbf7 100644 --- a/tests/e2e/tests.js +++ b/tests/e2e/tests.js @@ -45,3 +45,20 @@ test('issue99 regression', function() { m.render(dummyEl, view2); equal(dummyEl.innerHTML, '
0
', 'view2 should be rendered correctly'); }); + + +test('config handler context', function() { + expect(3); + var view = m('div', {config: function(evt, isInitialized, context){ + equal(context instanceof Object, true); + context.data = 1; + }}) + m.render(dummyEl, view); + + var view = m('div', {config: function(evt, isInitialized, context){ + equal(context instanceof Object, true); + equal(context.data, 1); + }}) + m.render(dummyEl, view); + +}) diff --git a/tests/mithril-tests.js b/tests/mithril-tests.js index f76b2264..09572c8f 100644 --- a/tests/mithril-tests.js +++ b/tests/mithril-tests.js @@ -998,9 +998,39 @@ function testMithril(mock) { test(function() { return m.deps.factory.toString().indexOf("console") < 0 }) + + // config context + test(function() { + var root = mock.document.createElement("div") + + var success = false; + m.render(root, m("div", {config: function(elem, isInitialized, ctx) {ctx.data=1}})); + m.render(root, m("div", {config: function(elem, isInitialized, ctx) {success = ctx.data===1}})); + return success; + }) + + // more complex config context + test(function() { + var root = mock.document.createElement("div") + + var idx = 0; + var success = true; + var statefulConfig = function(elem, isInitialized, ctx) {ctx.data=idx++} + var node = m("div", {config: statefulConfig}); + m.render(root, [node, node]); + + idx = 0; + var checkConfig = function(elem, isInitialized, ctx) { + success = success && (ctx.data === idx++) + } + node = m("div", {config: checkConfig}); + m.render(root, [node, node]); + return success; + }) + } //mocks testMithril(mock.window) -test.print(console.log) \ No newline at end of file +test.print(console.log)