You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by da...@apache.org on 2017/09/26 04:23:16 UTC
[17/46] incubator-weex git commit: * [html5] fix call loop.
* [html5] fix call loop.
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/31411dd4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/31411dd4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/31411dd4
Branch: refs/heads/0.16-dev
Commit: 31411dd4afd383cb4a25bd666830615c9c14e6d5
Parents: 902a1f7
Author: MrRaindrop <te...@gmail.com>
Authored: Fri Aug 25 15:19:01 2017 +0800
Committer: MrRaindrop <te...@gmail.com>
Committed: Fri Aug 25 15:19:01 2017 +0800
----------------------------------------------------------------------
html5/render/vue/README.md | 2 +-
html5/render/vue/core/node.js | 33 +++++++++++++++++++++++++-----
html5/render/vue/env/event-manager.js | 19 ++++++++---------
package.json | 2 +-
packages/weex-vue-render/README.md | 2 +-
packages/weex-vue-render/package.json | 2 +-
6 files changed, 41 insertions(+), 19 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/31411dd4/html5/render/vue/README.md
----------------------------------------------------------------------
diff --git a/html5/render/vue/README.md b/html5/render/vue/README.md
index 41df16b..bcdd2de 100644
--- a/html5/render/vue/README.md
+++ b/html5/render/vue/README.md
@@ -142,7 +142,7 @@ vue: {
* fix scanning style in production with uglified code.
-#### 0.12.6
+#### 0.12.8
* optimize event binding.
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/31411dd4/html5/render/vue/core/node.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/core/node.js b/html5/render/vue/core/node.js
index d38cafd..4cef067 100644
--- a/html5/render/vue/core/node.js
+++ b/html5/render/vue/core/node.js
@@ -54,6 +54,30 @@ function getListeners (vnode, evt) {
}
/**
+ * Instead of vue's invoker, this function should check if the binding function
+ * has a _weex_hook flag. If there is one, the handler should not be triggered.
+ * @param {Array | Function} fns
+ */
+export function applyFns (fns, ...args) {
+ if (Array.isArray(fns)) {
+ const cloned = fns.slice()
+ const len = cloned.length
+ for (let i = 0; i < len; i++) {
+ const fn = cloned[i]
+ if (fn._weex_hook) {
+ continue
+ }
+ fn.apply(null, args)
+ }
+ }
+ else {
+ if (!fns._weex_hook) {
+ fns.apply(null, args)
+ }
+ }
+}
+
+/**
* emit native events to enable v-on.
* @param {VComponent} context: which one to emit a event on.
* @param {array | object} events: extra events. You can pass in multiple arguments here.
@@ -90,11 +114,8 @@ export function createEventMap (context, ...events) {
if (len > 0) {
let idx = 0
while (idx < len) {
- let on = ons[idx]
- if (on && on.fn) {
- on = on.fn
- }
- on && on.call(vm, e)
+ const on = ons[idx]
+ applyFns(on.fns, e)
idx++
}
// once a parent node (or self node) has triggered the handler, then
@@ -107,6 +128,8 @@ export function createEventMap (context, ...events) {
vm = vm.$parent
}
}
+ // flag to distinguish from user-binding listeners.
+ handler._weex_hook = true
}
if (!eventMap[evtName]) {
eventMap[evtName] = []
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/31411dd4/html5/render/vue/env/event-manager.js
----------------------------------------------------------------------
diff --git a/html5/render/vue/env/event-manager.js b/html5/render/vue/env/event-manager.js
index 3ecf618..c19a649 100644
--- a/html5/render/vue/env/event-manager.js
+++ b/html5/render/vue/env/event-manager.js
@@ -19,6 +19,7 @@
import config from '../config'
import { createEvent, supportsPassive } from '../utils'
+import { applyFns } from '../core'
const gestureEvents = config.gestureEvents
const nativeEvents = ['click', 'touchstart', 'touchmove', 'touchend']
@@ -112,13 +113,11 @@ function _init (doc) {
if (len > 0) {
for (let i = 0; i < len; i++) {
- let handler = ons[i]
- if (handler && handler.fn) {
- handler = handler.fn
- }
- // create a no bubble event.
- const newEvt = createEvent(el, evt)
- handler && handler.call(vm, newEvt)
+ const handler = ons[i]
+ const newEvt = evtName === 'click'
+ ? createEvent(el, evtName)
+ : e
+ applyFns(handler.fns, newEvt)
}
e._triggered = { target: vm.$el }
disposed = true
@@ -127,8 +126,8 @@ function _init (doc) {
/**
* if the handler is binding on a <a> element, should trigger
* the handler first and then jump to href.
- * NOTE: if target==='_blank' then do no jumping and dispatch the
- * click event to document.body for further disposing.
+ * NOTE: if target==='_blank' then do no jumping and leave it
+ * to users binding handlers for further disposing.
*/
if (evtName === 'click' && isANode(elm)) {
const href = elm.getAttribute('href')
@@ -138,7 +137,7 @@ function _init (doc) {
location.href = href
}
else {
- document.body.dispatchEvent(e)
+ // do nothing.
}
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/31411dd4/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index 47b84dd..0b79cde 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,7 @@
"subversion": {
"browser": "0.5.0",
"framework": "0.21.11",
- "vue-render": "0.12.7",
+ "vue-render": "0.12.8",
"transformer": ">=0.1.5 <0.5"
},
"description": "A framework for building Mobile cross-platform UI",
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/31411dd4/packages/weex-vue-render/README.md
----------------------------------------------------------------------
diff --git a/packages/weex-vue-render/README.md b/packages/weex-vue-render/README.md
index 41df16b..bcdd2de 100644
--- a/packages/weex-vue-render/README.md
+++ b/packages/weex-vue-render/README.md
@@ -142,7 +142,7 @@ vue: {
* fix scanning style in production with uglified code.
-#### 0.12.6
+#### 0.12.8
* optimize event binding.
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/31411dd4/packages/weex-vue-render/package.json
----------------------------------------------------------------------
diff --git a/packages/weex-vue-render/package.json b/packages/weex-vue-render/package.json
index 1262ef1..b29cfdc 100644
--- a/packages/weex-vue-render/package.json
+++ b/packages/weex-vue-render/package.json
@@ -1,6 +1,6 @@
{
"name": "weex-vue-render",
- "version": "0.12.7",
+ "version": "0.12.8",
"description": "Weex built-in components for Vue 2.x.",
"license": "Apache-2.0",
"main": "dist/index.common.js",