From d9da7ddd1ddea3fbfa43220beffe263d4cbcc41a Mon Sep 17 00:00:00 2001 From: Jinjiang <zhaojinjiang@me.com> Date: Sun, 17 Apr 2016 17:17:41 +0800 Subject: [PATCH] + [jsfm] supported inline event binding format --- src/js-framework/lib/vm/__test__/directive.js | 30 +++++++++++++++++-- src/js-framework/lib/vm/directive.js | 7 +++-- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/src/js-framework/lib/vm/__test__/directive.js b/src/js-framework/lib/vm/__test__/directive.js index 6b879a79d7..623947badc 100644 --- a/src/js-framework/lib/vm/__test__/directive.js +++ b/src/js-framework/lib/vm/__test__/directive.js @@ -293,7 +293,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] @@ -304,9 +304,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) @@ -314,6 +328,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 66b052a3f4..4034ba733e 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) } }