1
1
/*!
2
- built in 2017-1-3:21:45 version 2.2.3 by 司徒正美
2
+ built in 2017-1-4:0:37 version 2.2.3 by 司徒正美
3
3
https://github.com/RubyLouvre/avalon/tree/2.2.3
4
4
5
-
6
- fix VElement hackIE BUG
7
- avalon.bind 在绑定非元素节点也要修正事件对象
8
- 处理expr的null undefined情况
9
- 修正error函数参数顺序导致的错误
10
- 支持组件继承(对象形式与函数形式皆可)
11
- 添加对安卓4.4, safari7, firefox50, chrome55的测试
5
+ 修正IE下 orderBy BUG
6
+ 更改下载Promise的提示
7
+ 修复avalon.modern 在Proxy 模式下使用ms-for 循环对象时出错的BUG
8
+ 修复effect内部传参 BUG
9
+ 重构ms-validate的绑定事件的机制
12
10
13
11
*/ ( function ( global , factory ) {
14
12
typeof exports === 'object' && typeof module !== 'undefined' ? module . exports = factory ( ) : typeof define === 'function' && define . amd ? define ( factory ) : global . avalon = factory ( ) ;
@@ -6192,41 +6190,11 @@ avalon.bind 在绑定非元素节点也要修正事件对象
6192
6190
function duplexBind ( vdom , addEvent ) {
6193
6191
var dom = vdom . dom ;
6194
6192
this . dom = dom ;
6193
+ this . vdom = vdom ;
6195
6194
this . duplexCb = updateDataHandle ;
6196
6195
dom . _ms_duplex_ = this ;
6197
6196
//绑定事件
6198
6197
addEvent ( dom , this ) ;
6199
- //添加验证
6200
-
6201
- var rules = vdom . rules ;
6202
- this . rules = rules ;
6203
- //将当前虚拟DOM的duplex添加到它上面的表单元素的validate指令的fields数组中
6204
- if ( rules && ! this . validator ) {
6205
- addValidate ( this , dom , true ) ;
6206
- }
6207
- }
6208
-
6209
- function addValidate ( field , dom , once ) {
6210
- while ( dom && dom . nodeType === 1 ) {
6211
- var validator = dom . _ms_validate_ ;
6212
- if ( validator ) {
6213
- field . validator = validator ;
6214
- if ( avalon . Array . ensure ( validator . fields , field ) ) {
6215
- validator . addField ( field ) ;
6216
- }
6217
- break ;
6218
- }
6219
- var p = dom . parentNode ;
6220
- if ( once && p && p . nodeType === 11 ) {
6221
- //如果input元素是循环生成的,那么它这时还没有插入到DOM树,其根节点是#document-fragment
6222
- setTimeout ( function ( ) {
6223
- addValidate ( field , dom ) ;
6224
- } ) ;
6225
- break ;
6226
- } else {
6227
- dom = p ;
6228
- }
6229
- }
6230
6198
}
6231
6199
6232
6200
var valueHijack = true ;
@@ -6539,7 +6507,6 @@ avalon.bind 在绑定非元素节点也要修正事件对象
6539
6507
init : duplexInit ,
6540
6508
diff : duplexDiff ,
6541
6509
update : function update ( vdom , value ) {
6542
- // var dom = vdom.dom
6543
6510
if ( ! this . dom ) {
6544
6511
duplexBind . call ( this , vdom , updateDataEvents ) ;
6545
6512
}
@@ -6589,9 +6556,6 @@ avalon.bind 在绑定非元素节点也要修正事件对象
6589
6556
if ( isObject ( rules ) ) {
6590
6557
var vdom = this . node ;
6591
6558
vdom . rules = platform . toJson ( rules ) ;
6592
- if ( vdom . duplex ) {
6593
- vdom . duplex . rules = vdom . rules ;
6594
- }
6595
6559
return true ;
6596
6560
}
6597
6561
}
@@ -6749,7 +6713,7 @@ avalon.bind 在绑定非元素节点也要修正事件对象
6749
6713
//也可以称之为safeValidate
6750
6714
vdom . vmValidator = validator ;
6751
6715
validator = platform . toJson ( validator ) ;
6752
-
6716
+ validator . vdom = vdom ;
6753
6717
vdom . validator = validator ;
6754
6718
for ( var name in valiDir . defaults ) {
6755
6719
if ( ! validator . hasOwnProperty ( name ) ) {
@@ -6761,10 +6725,22 @@ avalon.bind 在绑定非元素节点也要修正事件对象
6761
6725
}
6762
6726
} ,
6763
6727
update : function update ( vdom ) {
6728
+
6764
6729
var validator = vdom . validator ;
6765
- var dom = vdom . dom ;
6766
- validator . dom = dom ;
6730
+ var dom = validator . dom = vdom . dom ;
6767
6731
dom . _ms_validate_ = validator ;
6732
+ var fields = validator . fields ;
6733
+ collectFeild ( vdom . children , fields , validator ) ;
6734
+ avalon . bind ( document , 'focusin' , function ( e ) {
6735
+ var dom = e . target ;
6736
+ var duplex = dom . _ms_duplex_ ;
6737
+ var vdom = ( duplex || { } ) . vdom ;
6738
+ if ( duplex && vdom . rules && ! duplex . validator ) {
6739
+ if ( avalon . Array . ensure ( fields , duplex ) ) {
6740
+ bindValidateEvent ( duplex , validator ) ;
6741
+ }
6742
+ }
6743
+ } ) ;
6768
6744
6769
6745
//为了方便用户手动执行验证,我们需要为原始vmValidate上添加一个onManual方法
6770
6746
var v = vdom . vmValidator ;
@@ -6785,18 +6761,12 @@ avalon.bind 在绑定非元素节点也要修正事件对象
6785
6761
onManual ( ) ;
6786
6762
} ) ;
6787
6763
}
6788
- /* istanbul ignore if */
6789
- if ( typeof validator . onInit === 'function' ) {
6790
- //vmodels是不包括vmodel的
6791
- validator . onInit . call ( dom , {
6792
- type : 'init' ,
6793
- target : dom ,
6794
- validator : validator
6795
- } ) ;
6796
- }
6797
6764
} ,
6798
6765
validateAll : function validateAll ( callback ) {
6799
6766
var validator = this ;
6767
+ var vdom = this . vdom ;
6768
+ var fields = validator . fields = [ ] ;
6769
+ collectFeild ( vdom . children , fields , validator ) ;
6800
6770
var fn = typeof callback === 'function' ? callback : validator . onValidateAll ;
6801
6771
var promises = validator . fields . filter ( function ( field ) {
6802
6772
var el = field . dom ;
@@ -6823,28 +6793,7 @@ avalon.bind 在绑定非元素节点也要修正事件对象
6823
6793
fn . call ( validator . dom , reasons ) ; //这里只放置未通过验证的组件
6824
6794
} ) ;
6825
6795
} ,
6826
- addField : function addField ( field ) {
6827
- var validator = this ;
6828
- var node = field . dom ;
6829
- /* istanbul ignore if */
6830
- if ( validator . validateInKeyup && ! field . isChanged && ! field . debounceTime ) {
6831
- avalon . bind ( node , 'keyup' , function ( e ) {
6832
- validator . validate ( field , 0 , e ) ;
6833
- } ) ;
6834
- }
6835
- /* istanbul ignore if */
6836
- if ( validator . validateInBlur ) {
6837
- avalon . bind ( node , 'blur' , function ( e ) {
6838
- validator . validate ( field , 0 , e ) ;
6839
- } ) ;
6840
- }
6841
- /* istanbul ignore if */
6842
- if ( validator . resetInFocus ) {
6843
- avalon . bind ( node , 'focus' , function ( e ) {
6844
- validator . onReset . call ( node , e , field ) ;
6845
- } ) ;
6846
- }
6847
- } ,
6796
+
6848
6797
validate : function validate ( field , isValidateAll , event ) {
6849
6798
var promises = [ ] ;
6850
6799
var value = field . value ;
@@ -6857,7 +6806,7 @@ avalon.bind 在绑定非元素节点也要修正事件对象
6857
6806
}
6858
6807
/* istanbul ignore if */
6859
6808
if ( elem . disabled ) return ;
6860
- var rules = field . rules ;
6809
+ var rules = field . vdom . rules ;
6861
6810
var ngs = [ ] ,
6862
6811
isOk = true ;
6863
6812
if ( ! ( rules . norequired && value === '' ) ) {
@@ -6910,6 +6859,46 @@ avalon.bind 在绑定非元素节点也要修正事件对象
6910
6859
}
6911
6860
} ) ;
6912
6861
6862
+ function collectFeild ( nodes , fields , validator ) {
6863
+ for ( var i = 0 , vdom ; vdom = nodes [ i ++ ] ; ) {
6864
+ var duplex = vdom . rules && vdom . duplex ;
6865
+ if ( duplex ) {
6866
+ fields . push ( duplex ) ;
6867
+ bindValidateEvent ( duplex , validator ) ;
6868
+ } else if ( vdom . children ) {
6869
+ collectFeild ( vdom . children , fields , validator ) ;
6870
+ } else if ( Array . isArray ( vdom ) ) {
6871
+ collectFeild ( vdom , fields , validator ) ;
6872
+ }
6873
+ }
6874
+ }
6875
+
6876
+ function bindValidateEvent ( field , validator ) {
6877
+
6878
+ var node = field . dom ;
6879
+ if ( field . validator ) {
6880
+ return ;
6881
+ }
6882
+ field . validator = validator ;
6883
+ /* istanbul ignore if */
6884
+ if ( validator . validateInKeyup && ! field . isChanged && ! field . debounceTime ) {
6885
+ avalon . bind ( node , 'keyup' , function ( e ) {
6886
+ validator . validate ( field , 0 , e ) ;
6887
+ } ) ;
6888
+ }
6889
+ /* istanbul ignore if */
6890
+ if ( validator . validateInBlur ) {
6891
+ avalon . bind ( node , 'blur' , function ( e ) {
6892
+ validator . validate ( field , 0 , e ) ;
6893
+ } ) ;
6894
+ }
6895
+ /* istanbul ignore if */
6896
+ if ( validator . resetInFocus ) {
6897
+ avalon . bind ( node , 'focus' , function ( e ) {
6898
+ validator . onReset . call ( node , e , field ) ;
6899
+ } ) ;
6900
+ }
6901
+ }
6913
6902
var rformat = / \\ ? { { ( [ ^ { } ] + ) \} } / gm;
6914
6903
6915
6904
function getMessage ( ) {
@@ -6920,7 +6909,6 @@ avalon.bind 在绑定非元素节点也要修正事件对象
6920
6909
}
6921
6910
valiDir . defaults = {
6922
6911
validate : valiDir . validate ,
6923
- addField : valiDir . addField , //供内部使用,收集此元素底下的所有ms-duplex的域对象
6924
6912
onError : avalon . noop ,
6925
6913
onSuccess : avalon . noop ,
6926
6914
onComplete : avalon . noop ,
0 commit comments