diff --git a/src/js-framework/lib/vm/__test__/directive.js b/src/js-framework/lib/vm/__test__/directive.js index dc83be3dd2..e26d76ebb5 100644 --- a/src/js-framework/lib/vm/__test__/directive.js +++ b/src/js-framework/lib/vm/__test__/directive.js @@ -304,7 +304,7 @@ describe('bind events', () => { manager = null }) // - bind method to eventManager - it('add event to manager', () => { + it('add event to manager by type', () => { vm._bindEvents(el, {click: 'foo'}) expect(manager.targets.length).equal(1) var target = manager.targets[0] @@ -315,9 +315,23 @@ describe('bind events', () => { expect(el.event.length).equal(1) expect(el.event[0]).equal('click') }) + // - bind method to eventManager + it('add event to manager by handler', () => { + vm._bindEvents(el, {click: function ($event) { + this.foo(this.a, $event) + }}) + expect(manager.targets.length).equal(1) + var target = manager.targets[0] + expect(target).a('object') + expect(target.el).equal(el) + expect(target.events).a('object') + expect(target.events.click).a('function') + expect(el.event.length).equal(1) + expect(el.event[0]).equal('click') + }) // - fireEvent to call method // - with right event info - it('fire event from manager', () => { + it('fire event from manager by type', () => { var e = {} vm._bindEvents(el, {click: 'foo'}) manager.fire(el, 'click', e) @@ -325,6 +339,18 @@ describe('bind events', () => { expect(cb).calledOn(vm) expect(cb).calledWith(e) }) + // - fireEvent to call method + // - with right event info + it('fire event from manager by handler', () => { + var e = {} + vm._bindEvents(el, {click: function ($event) { + this.foo(this.a, $event) + }}) + manager.fire(el, 'click', e) + expect(cb).calledOnce + expect(cb).calledOn(vm) + expect(cb).calledWith(1, e) + }) }) // exports._bindSubVm(subVm, template) diff --git a/src/js-framework/lib/vm/directive.js b/src/js-framework/lib/vm/directive.js index 0dbc525d02..5955286117 100644 --- a/src/js-framework/lib/vm/directive.js +++ b/src/js-framework/lib/vm/directive.js @@ -220,8 +220,11 @@ export function _bindEvents(el, events) { let i = keys.length while (i--) { const key = keys[i] - const handlerName = events[key] - this._setEvent(el, key, this[handlerName]) + let handler = events[key] + if (typeof handler === 'string') { + handler = this[handler] + } + this._setEvent(el, key, handler) } }