diff --git a/packages/blaze/view.js b/packages/blaze/view.js index 9b4e703e91..c3412d34e3 100644 --- a/packages/blaze/view.js +++ b/packages/blaze/view.js @@ -529,7 +529,11 @@ Blaze._addEventMap = function (view, eventMap, thisInHandler) { function (evt) { if (! range.containsElement(evt.currentTarget)) return null; - return handler.apply(thisInHandler || this, arguments); + var handlerThis = thisInHandler || this; + var handlerArgs = arguments; + return Blaze.withCurrentView(view, function () { + return handler.apply(handlerThis, handlerArgs); + }); }, range, function (r) { return r.parentRange; diff --git a/packages/spacebars-tests/template_tests.html b/packages/spacebars-tests/template_tests.html index bfd11eef8f..d7d715c09d 100644 --- a/packages/spacebars-tests/template_tests.html +++ b/packages/spacebars-tests/template_tests.html @@ -922,3 +922,7 @@ Hi there! + + diff --git a/packages/spacebars-tests/template_tests.js b/packages/spacebars-tests/template_tests.js index dffe1f750d..655f476f44 100644 --- a/packages/spacebars-tests/template_tests.js +++ b/packages/spacebars-tests/template_tests.js @@ -2604,3 +2604,26 @@ _.each([1, 2, 3], function (n) { } ); }); + +Tinytest.add('spacebars-tests - template_tests - current view in event handler', function (test) { + var tmpl = Template.spacebars_test_current_view_in_event; + + var currentView; + var currentData; + + tmpl.events({ + 'click span': function () { + currentView = Blaze.getCurrentView(); + currentData = Blaze.getCurrentData(); + } + }); + + var div = renderToDiv(tmpl, 'blah'); + test.equal(canonicalizeHtml(div.innerHTML), 'blah'); + document.body.appendChild(div); + clickElement(div.querySelector('span')); + $(div).remove(); + + test.isTrue(currentView); + test.equal(currentData, 'blah'); +});