Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
uni-app
提交
4e6071cd
U
uni-app
项目概览
DCloud
/
uni-app
大约 1 个月 前同步成功
通知
702
Star
38705
Fork
3642
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
7
列表
看板
标记
里程碑
合并请求
1
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
uni-app
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
7
Issue
7
列表
看板
标记
里程碑
合并请求
1
合并请求
1
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
4e6071cd
编写于
4月 03, 2019
作者:
fxy060608
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat(runtime): mp 重构事件实现
上级
4d712784
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
171 addition
and
7 deletion
+171
-7
packages/uni-mp-weixin/dist/index.js
packages/uni-mp-weixin/dist/index.js
+85
-3
packages/uni-mp-weixin/package.json
packages/uni-mp-weixin/package.json
+1
-1
src/core/runtime/wrapper/util.js
src/core/runtime/wrapper/util.js
+85
-3
未找到文件。
packages/uni-mp-weixin/dist/index.js
浏览文件 @
4e6071cd
...
@@ -385,13 +385,84 @@ function wrapper$1 (event) {
...
@@ -385,13 +385,84 @@ function wrapper$1 (event) {
return
event
return
event
}
}
function
processEventArgs
(
event
,
args
=
[],
isCustom
,
methodName
)
{
function
getExtraValue
(
vm
,
dataPathsArray
)
{
let
context
=
vm
;
dataPathsArray
.
forEach
(
dataPathArray
=>
{
const
dataPath
=
dataPathArray
[
0
];
const
value
=
dataPathArray
[
2
];
if
(
dataPath
||
typeof
value
!==
'
undefined
'
)
{
// ['','',index,'disable']
const
propPath
=
dataPathArray
[
1
];
const
valuePath
=
dataPathArray
[
3
];
const
vFor
=
dataPath
?
vm
.
__get_value
(
dataPath
,
context
)
:
context
;
if
(
Number
.
isInteger
(
vFor
))
{
context
=
value
;
}
else
if
(
!
propPath
)
{
context
=
vFor
[
value
];
}
else
{
if
(
Array
.
isArray
(
vFor
))
{
context
=
vFor
.
find
(
vForItem
=>
{
return
vm
.
__get_value
(
propPath
,
vForItem
)
===
value
});
}
else
if
(
isPlainObject
(
vFor
))
{
context
=
Object
.
keys
(
vFor
).
find
(
vForKey
=>
{
return
vm
.
__get_value
(
propPath
,
vFor
[
vForKey
])
===
value
});
}
else
{
console
.
error
(
'
v-for 暂不支持循环数据:
'
,
vFor
);
}
}
if
(
valuePath
)
{
context
=
vm
.
__get_value
(
valuePath
,
context
);
}
}
});
return
context
}
function
processEventExtra
(
vm
,
extra
)
{
const
extraObj
=
{};
if
(
Array
.
isArray
(
extra
)
&&
extra
.
length
)
{
/**
*[
* ['data.items', 'data.id', item.data.id],
* ['metas', 'id', meta.id]
*],
*[
* ['data.items', 'data.id', item.data.id],
* ['metas', 'id', meta.id]
*],
*'test'
*/
extra
.
forEach
((
dataPath
,
index
)
=>
{
if
(
typeof
dataPath
===
'
string
'
)
{
if
(
!
dataPath
)
{
// model,prop.sync
extraObj
[
'
$
'
+
index
]
=
vm
;
}
else
{
extraObj
[
'
$
'
+
index
]
=
vm
.
__get_value
(
dataPath
);
}
}
else
{
extraObj
[
'
$
'
+
index
]
=
getExtraValue
(
vm
,
dataPath
);
}
});
}
return
extraObj
}
function
processEventArgs
(
vm
,
event
,
args
=
[],
extra
=
[],
isCustom
,
methodName
)
{
if
(
isCustom
&&
!
args
.
length
)
{
// 无参数,直接传入 detail 数组
if
(
isCustom
&&
!
args
.
length
)
{
// 无参数,直接传入 detail 数组
if
(
!
Array
.
isArray
(
event
.
detail
))
{
// 应该是使用了 wxcomponent 原生组件,为了向前兼容,传递原始 event 对象
if
(
!
Array
.
isArray
(
event
.
detail
))
{
// 应该是使用了 wxcomponent 原生组件,为了向前兼容,传递原始 event 对象
return
[
event
]
return
[
event
]
}
}
return
event
.
detail
return
event
.
detail
}
}
const
extraObj
=
processEventExtra
(
vm
,
extra
);
const
ret
=
[];
const
ret
=
[];
args
.
forEach
(
arg
=>
{
args
.
forEach
(
arg
=>
{
if
(
arg
===
'
$event
'
)
{
if
(
arg
===
'
$event
'
)
{
...
@@ -401,7 +472,11 @@ function processEventArgs (event, args = [], isCustom, methodName) {
...
@@ -401,7 +472,11 @@ function processEventArgs (event, args = [], isCustom, methodName) {
ret
.
push
(
isCustom
?
event
.
detail
[
0
]
:
event
);
ret
.
push
(
isCustom
?
event
.
detail
[
0
]
:
event
);
}
}
}
else
{
}
else
{
ret
.
push
(
arg
);
if
(
typeof
arg
===
'
string
'
&&
hasOwn
(
extraObj
,
arg
))
{
ret
.
push
(
extraObj
[
arg
]);
}
else
{
ret
.
push
(
arg
);
}
}
}
});
});
...
@@ -444,7 +519,14 @@ function handleEvent (event) {
...
@@ -444,7 +519,14 @@ function handleEvent (event) {
}
}
handler
.
once
=
true
;
handler
.
once
=
true
;
}
}
handler
.
apply
(
this
.
$vm
,
processEventArgs
(
event
,
eventArray
[
1
],
isCustom
,
methodName
));
handler
.
apply
(
this
.
$vm
,
processEventArgs
(
this
.
$vm
,
event
,
eventArray
[
1
],
eventArray
[
2
],
isCustom
,
methodName
));
});
});
}
}
});
});
...
...
packages/uni-mp-weixin/package.json
浏览文件 @
4e6071cd
{
{
"name"
:
"@dcloudio/uni-mp-weixin"
,
"name"
:
"@dcloudio/uni-mp-weixin"
,
"version"
:
"0.0.92
3
"
,
"version"
:
"0.0.92
4
"
,
"description"
:
"uni-app mp-weixin"
,
"description"
:
"uni-app mp-weixin"
,
"main"
:
"dist/index.js"
,
"main"
:
"dist/index.js"
,
"scripts"
:
{
"scripts"
:
{
...
...
src/core/runtime/wrapper/util.js
浏览文件 @
4e6071cd
...
@@ -128,13 +128,84 @@ function wrapper (event) {
...
@@ -128,13 +128,84 @@ function wrapper (event) {
return
event
return
event
}
}
function
processEventArgs
(
event
,
args
=
[],
isCustom
,
methodName
)
{
function
getExtraValue
(
vm
,
dataPathsArray
)
{
let
context
=
vm
dataPathsArray
.
forEach
(
dataPathArray
=>
{
const
dataPath
=
dataPathArray
[
0
]
const
value
=
dataPathArray
[
2
]
if
(
dataPath
||
typeof
value
!==
'
undefined
'
)
{
// ['','',index,'disable']
const
propPath
=
dataPathArray
[
1
]
const
valuePath
=
dataPathArray
[
3
]
const
vFor
=
dataPath
?
vm
.
__get_value
(
dataPath
,
context
)
:
context
if
(
Number
.
isInteger
(
vFor
))
{
context
=
value
}
else
if
(
!
propPath
)
{
context
=
vFor
[
value
]
}
else
{
if
(
Array
.
isArray
(
vFor
))
{
context
=
vFor
.
find
(
vForItem
=>
{
return
vm
.
__get_value
(
propPath
,
vForItem
)
===
value
})
}
else
if
(
isPlainObject
(
vFor
))
{
context
=
Object
.
keys
(
vFor
).
find
(
vForKey
=>
{
return
vm
.
__get_value
(
propPath
,
vFor
[
vForKey
])
===
value
})
}
else
{
console
.
error
(
'
v-for 暂不支持循环数据:
'
,
vFor
)
}
}
if
(
valuePath
)
{
context
=
vm
.
__get_value
(
valuePath
,
context
)
}
}
})
return
context
}
function
processEventExtra
(
vm
,
extra
)
{
const
extraObj
=
{}
if
(
Array
.
isArray
(
extra
)
&&
extra
.
length
)
{
/**
*[
* ['data.items', 'data.id', item.data.id],
* ['metas', 'id', meta.id]
*],
*[
* ['data.items', 'data.id', item.data.id],
* ['metas', 'id', meta.id]
*],
*'test'
*/
extra
.
forEach
((
dataPath
,
index
)
=>
{
if
(
typeof
dataPath
===
'
string
'
)
{
if
(
!
dataPath
)
{
// model,prop.sync
extraObj
[
'
$
'
+
index
]
=
vm
}
else
{
extraObj
[
'
$
'
+
index
]
=
vm
.
__get_value
(
dataPath
)
}
}
else
{
extraObj
[
'
$
'
+
index
]
=
getExtraValue
(
vm
,
dataPath
)
}
})
}
return
extraObj
}
function
processEventArgs
(
vm
,
event
,
args
=
[],
extra
=
[],
isCustom
,
methodName
)
{
if
(
isCustom
&&
!
args
.
length
)
{
// 无参数,直接传入 detail 数组
if
(
isCustom
&&
!
args
.
length
)
{
// 无参数,直接传入 detail 数组
if
(
!
Array
.
isArray
(
event
.
detail
))
{
// 应该是使用了 wxcomponent 原生组件,为了向前兼容,传递原始 event 对象
if
(
!
Array
.
isArray
(
event
.
detail
))
{
// 应该是使用了 wxcomponent 原生组件,为了向前兼容,传递原始 event 对象
return
[
event
]
return
[
event
]
}
}
return
event
.
detail
return
event
.
detail
}
}
const
extraObj
=
processEventExtra
(
vm
,
extra
)
const
ret
=
[]
const
ret
=
[]
args
.
forEach
(
arg
=>
{
args
.
forEach
(
arg
=>
{
if
(
arg
===
'
$event
'
)
{
if
(
arg
===
'
$event
'
)
{
...
@@ -144,7 +215,11 @@ function processEventArgs (event, args = [], isCustom, methodName) {
...
@@ -144,7 +215,11 @@ function processEventArgs (event, args = [], isCustom, methodName) {
ret
.
push
(
isCustom
?
event
.
detail
[
0
]
:
event
)
ret
.
push
(
isCustom
?
event
.
detail
[
0
]
:
event
)
}
}
}
else
{
}
else
{
ret
.
push
(
arg
)
if
(
typeof
arg
===
'
string
'
&&
hasOwn
(
extraObj
,
arg
))
{
ret
.
push
(
extraObj
[
arg
])
}
else
{
ret
.
push
(
arg
)
}
}
}
})
})
...
@@ -187,7 +262,14 @@ export function handleEvent (event) {
...
@@ -187,7 +262,14 @@ export function handleEvent (event) {
}
}
handler
.
once
=
true
handler
.
once
=
true
}
}
handler
.
apply
(
this
.
$vm
,
processEventArgs
(
event
,
eventArray
[
1
],
isCustom
,
methodName
))
handler
.
apply
(
this
.
$vm
,
processEventArgs
(
this
.
$vm
,
event
,
eventArray
[
1
],
eventArray
[
2
],
isCustom
,
methodName
))
})
})
}
}
})
})
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录