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)