1
1
/*!
2
- built in 2016-12-8:20:35 version 2.2.2 by 司徒正美
2
+ built in 2016-12-9:0:9 version 2.2.2 by 司徒正美
3
3
https://github.com/RubyLouvre/avalon/tree/2.2.1
4
4
5
5
@@ -4298,6 +4298,22 @@ IE7的checked属性应该使用defaultChecked来设置
4298
4298
4299
4299
platform . createProxy = createProxy ;
4300
4300
4301
+ platform . itemFactory = function itemFactory ( before , after ) {
4302
+ var keyMap = before . $model ;
4303
+ var core = new IProxy ( keyMap ) ;
4304
+ var state = avalon . shadowCopy ( core . $accessors , before . $accessors ) ; //防止互相污染
4305
+ var data = after . data ;
4306
+ //core是包含系统属性的对象
4307
+ //keyMap是不包含系统属性的对象, keys
4308
+ for ( var key in data ) {
4309
+ var val = keyMap [ key ] = core [ key ] = data [ key ] ;
4310
+ state [ key ] = createAccessor ( key , val ) ;
4311
+ }
4312
+ var keys = Object . keys ( keyMap ) ;
4313
+ var vm = platform . createViewModel ( core , state , core ) ;
4314
+ platform . afterCreate ( vm , core , keys ) ;
4315
+ return vm ;
4316
+ } ;
4301
4317
function createAccessor ( key , val , isComputed ) {
4302
4318
var mutation = null ;
4303
4319
var Accessor = isComputed ? Computed : Mutation ;
@@ -5504,20 +5520,6 @@ IE7的checked属性应该使用defaultChecked来设置
5504
5520
this . node . forDir = this ; //暴露给component/index.js中的resetParentChildren方法使用
5505
5521
this . fragment = [ '<div>' , this . fragment , '<!--' , this . signature , '--></div>' ] . join ( '' ) ;
5506
5522
this . cache = { } ;
5507
- var me = this ;
5508
- this . innerAction = {
5509
- uuid : Math . random ( ) ,
5510
- schedule : function schedule ( ) {
5511
-
5512
- me . fragments && me . fragments . forEach ( function ( el ) {
5513
- updateItemVm ( el . vm , me . vm ) ;
5514
-
5515
- el . innerRender . update ( ) ;
5516
- } ) ;
5517
- this . _isScheduled = false ;
5518
- }
5519
- } ;
5520
- collectInFor ( this ) ;
5521
5523
} ,
5522
5524
diff : function diff ( newVal , oldVal ) {
5523
5525
/* istanbul ignore if */
@@ -5632,7 +5634,6 @@ IE7的checked属性应该使用defaultChecked来设置
5632
5634
fragment . index = index ; // 相当于 c.index
5633
5635
fragment . vm [ instance . keyName ] = instance . isArray ? index : fragment . key ;
5634
5636
saveInCache ( newCache , fragment ) ;
5635
- fragment . innerRender . update ( ) ;
5636
5637
} else {
5637
5638
//如果找不到就进行模糊搜索
5638
5639
fuzzy . push ( c ) ;
@@ -5649,12 +5650,12 @@ IE7的checked属性应该使用defaultChecked来设置
5649
5650
5650
5651
fragment . vm [ instance . valName ] = val ;
5651
5652
fragment . vm [ instance . keyName ] = instance . isArray ? index : fragment . key ;
5652
- fragment . innerRender . update ( ) ;
5653
5653
delete fragment . _dispose ;
5654
5654
} else {
5655
- //new VFragment([], k, value, i++
5656
- fragment = new VFragment ( [ ] , c . key , c . val , c . index ) ;
5657
- fragment = FragmentDecorator ( fragment , instance , c . index ) ;
5655
+
5656
+ c = new VFragment ( [ ] , c . key , c . val , c . index ) ;
5657
+
5658
+ fragment = FragmentDecorator ( c , instance , c . index ) ;
5658
5659
list . push ( fragment ) ;
5659
5660
}
5660
5661
saveInCache ( newCache , fragment ) ;
@@ -5667,27 +5668,6 @@ IE7的checked属性应该使用defaultChecked来设置
5667
5668
instance . cache = newCache ;
5668
5669
}
5669
5670
5670
- function updateItemVm ( vm , top ) {
5671
- for ( var i in top ) {
5672
- if ( top . hasOwnProperty ( i ) ) {
5673
- vm [ i ] = top [ i ] ;
5674
- }
5675
- }
5676
- }
5677
-
5678
- function collectInFor ( instance ) {
5679
- var top = instance . vm ;
5680
-
5681
- if ( ! top ) return ;
5682
- var deps = top . $mutations || { } ;
5683
- for ( var i in top ) {
5684
- try {
5685
- var created = top [ i ] ;
5686
- avalon . Array . ensure ( deps [ i ] . observers , instance . innerAction ) ;
5687
- } catch ( e ) { }
5688
- }
5689
- }
5690
-
5691
5671
function updateList ( instance ) {
5692
5672
var before = instance . begin . dom ;
5693
5673
var parent = before . parentNode ;
@@ -5721,32 +5701,28 @@ IE7的checked属性应该使用defaultChecked来设置
5721
5701
* @returns { key, val, index, oldIndex, this, dom, split, vm }
5722
5702
*/
5723
5703
function FragmentDecorator ( fragment , instance , index ) {
5724
- var top = instance . vm ,
5725
- data = { } ;
5726
- updateItemVm ( data , top ) ;
5727
-
5728
- data . $events = { } ;
5704
+ var data = { } ;
5729
5705
data [ instance . keyName ] = instance . isArray ? index : fragment . key ;
5730
5706
data [ instance . valName ] = fragment . val ;
5731
5707
if ( instance . asName ) {
5732
5708
data [ instance . asName ] = instance . value ;
5733
5709
}
5734
-
5735
- // if(instance.isArray){
5736
- // vm.$watch(instance.valName, function(a){
5737
- // if (instance.value && instance.value.set) {
5738
- // instance.value.set(vm[ instance.keyName], a)
5739
- // }
5740
- // })
5741
- // }else{
5742
- // vm.$watch(instance.valName, function(a){
5743
- // instance.value[fragment.key] = a
5744
- // })
5745
- // }
5746
-
5747
- fragment . vm = data ;
5710
+ var vm = fragment . vm = platform . itemFactory ( instance . vm , {
5711
+ data : data
5712
+ } ) ;
5713
+ if ( instance . isArray ) {
5714
+ vm . $watch ( instance . valName , function ( a ) {
5715
+ if ( instance . value && instance . value . set ) {
5716
+ instance . value . set ( vm [ instance . keyName ] , a ) ;
5717
+ }
5718
+ } ) ;
5719
+ } else {
5720
+ vm . $watch ( instance . valName , function ( a ) {
5721
+ instance . value [ fragment . key ] = a ;
5722
+ } ) ;
5723
+ }
5748
5724
fragment . index = index ;
5749
- data . $render = fragment . innerRender = avalon . scan ( instance . fragment , data , function ( ) {
5725
+ fragment . innerRender = avalon . scan ( instance . fragment , vm , function ( ) {
5750
5726
var oldRoot = this . root ;
5751
5727
ap . push . apply ( fragment . children , oldRoot . children ) ;
5752
5728
this . root = fragment ;
0 commit comments