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)
   }
 }