@@ -622,6 +622,60 @@ if (_.inBrowser) {
622
622
} )
623
623
} )
624
624
625
+ it ( 'nested track by' , function ( done ) {
626
+ assertTrackBy ( '<div v-repeat="list" track-by="id">{{msg}}<div v-repeat="list" track-by="id">{{msg}}</div></div>' , function ( ) {
627
+ assertTrackBy ( '<div v-transition v-repeat="list" track-by="id">{{msg}}<div v-transition v-repeat="list" track-by="id">{{msg}}</div></div>' , done )
628
+ } )
629
+
630
+ function assertTrackBy ( template , next ) {
631
+ var vm = new Vue ( {
632
+ el : el ,
633
+ data : {
634
+ list : [
635
+ { id : 1 , msg : 'hi' , list : [
636
+ { id : 1 , msg : 'hi foo' }
637
+ ] } ,
638
+ { id : 2 , msg : 'ha' , list : [ ] } ,
639
+ { id : 3 , msg : 'ho' , list : [ ] }
640
+ ]
641
+ } ,
642
+ template : template
643
+ } )
644
+ assertMarkup ( )
645
+
646
+ var oldVms = vm . _children . slice ( )
647
+
648
+ vm . list = [
649
+ { id : 1 , msg : 'wa' , list : [
650
+ { id : 1 , msg : 'hi foo' } ,
651
+ { id : 2 , msg : 'hi bar' }
652
+ ] } ,
653
+ { id : 2 , msg : 'wo' , list : [ ] }
654
+ ]
655
+
656
+ _ . nextTick ( function ( ) {
657
+ assertMarkup ( )
658
+ // should reuse old vms!
659
+ var i = 2
660
+ while ( i -- ) {
661
+ expect ( vm . _children [ i ] ) . toBe ( oldVms [ i ] )
662
+ }
663
+ expect ( vm . _children [ 0 ] . _children [ 0 ] ) . toBe ( oldVms [ 0 ] . _children [ 0 ] )
664
+ next ( )
665
+ } )
666
+
667
+ function assertMarkup ( ) {
668
+ var markup = vm . list . map ( function ( item ) {
669
+ var sublist = item . list . map ( function ( item ) {
670
+ return '<div>' + item . msg + '</div>'
671
+ } ) . join ( '' ) + '<!--v-repeat-->'
672
+ return '<div>' + item . msg + sublist + '</div>'
673
+ } ) . join ( '' ) + '<!--v-repeat-->'
674
+ expect ( el . innerHTML ) . toBe ( markup )
675
+ }
676
+ }
677
+ } )
678
+
625
679
} )
626
680
}
627
681
0 commit comments