@@ -332,7 +332,10 @@ var Scroller = {
332
332
} else {
333
333
scrollTop = index * this . itemHeight ;
334
334
}
335
- this . $el . scrollTop = scrollTop ;
335
+ this . scrollToPosition ( scrollTop ) ;
336
+ } ,
337
+ scrollToPosition : function scrollToPosition ( position ) {
338
+ this . $el . scrollTop = position ;
336
339
}
337
340
}
338
341
} ;
@@ -341,11 +344,11 @@ var VirtualScroller = { render: function render() {
341
344
var _vm = this ; var _h = _vm . $createElement ; var _c = _vm . _self . _c || _h ; return _c ( _vm . mainTag , { directives : [ { name : "observe-visibility" , rawName : "v-observe-visibility" , value : _vm . handleVisibilityChange , expression : "handleVisibilityChange" } ] , tag : "component" , staticClass : "virtual-scroller" , class : _vm . cssClass , on : { "&scroll" : function scroll ( $event ) {
342
345
_vm . handleScroll ( $event ) ;
343
346
} } } , [ _vm . _t ( "before-container" ) , _vm . _v ( " " ) , _c ( _vm . containerTag , { ref : "itemContainer" , tag : "component" , staticClass : "item-container" , class : _vm . containerClass , style : _vm . itemContainerStyle } , [ _vm . _t ( "before-content" ) , _vm . _v ( " " ) , _c ( _vm . contentTag , { ref : "items" , tag : "component" , staticClass : "items" , class : _vm . contentClass , style : _vm . itemsStyle } , [ _vm . renderers ? _vm . _l ( _vm . visibleItems , function ( item , index ) {
344
- return _c ( _vm . renderers [ item [ _vm . typeField ] ] , { key : _vm . keysEnabled && item [ _vm . keyField ] || undefined , tag : "component" , staticClass : "item" , attrs : { "item" : item , "item-index" : _vm . _startIndex + index } } ) ;
347
+ return _c ( _vm . renderers [ item [ _vm . typeField ] ] , { key : _vm . keysEnabled && item [ _vm . keyField ] || undefined , tag : "component" , staticClass : "item" , attrs : { "item" : item , "item-index" : _vm . $ _startIndex + index } } ) ;
345
348
} ) : [ _vm . _l ( _vm . visibleItems , function ( item , index ) {
346
- return _vm . _t ( "default" , null , { item : item , itemIndex : _vm . _startIndex + index , itemKey : _vm . keysEnabled && item [ _vm . keyField ] || undefined } ) ;
349
+ return _vm . _t ( "default" , null , { item : item , itemIndex : _vm . $ _startIndex + index , itemKey : _vm . keysEnabled && item [ _vm . keyField ] || undefined } ) ;
347
350
} ) ] ] , 2 ) , _vm . _v ( " " ) , _vm . _t ( "after-content" ) ] , 2 ) , _vm . _v ( " " ) , _vm . _t ( "after-container" ) , _vm . _v ( " " ) , _c ( 'resize-observer' , { on : { "notify" : _vm . handleResize } } ) ] , 2 ) ;
348
- } , staticRenderFns : [ ] , _scopeId : 'data-v-727d6836 ' ,
351
+ } , staticRenderFns : [ ] , _scopeId : 'data-v-2b1f2e05 ' ,
349
352
name : 'virtual-scroller' ,
350
353
351
354
mixins : [ Scroller ] ,
@@ -601,7 +604,7 @@ var RecycleList = { render: function render() {
601
604
} } } , [ _c ( 'div' , { ref : "wrapper" , staticClass : "item-wrapper" , style : { height : _vm . totalHeight + 'px' } } , _vm . _l ( _vm . pool , function ( view ) {
602
605
return _c ( 'div' , { key : view . nr . id , staticClass : "item-view" , style : { transform : 'translateY(' + view . top + 'px)' } } , [ _vm . _t ( "default" , null , { item : view . item , index : view . nr . index , active : view . nr . used } ) ] , 2 ) ;
603
606
} ) ) , _vm . _v ( " " ) , _vm . _t ( "after-container" ) , _vm . _v ( " " ) , _c ( 'resize-observer' , { on : { "notify" : _vm . handleResize } } ) ] , 2 ) ;
604
- } , staticRenderFns : [ ] , _scopeId : 'data-v-68940351 ' ,
607
+ } , staticRenderFns : [ ] , _scopeId : 'data-v-2277f571 ' ,
605
608
name : 'RecycleList' ,
606
609
607
610
mixins : [ Scroller ] ,
@@ -610,6 +613,10 @@ var RecycleList = { render: function render() {
610
613
itemHeight : {
611
614
type : Number ,
612
615
default : null
616
+ } ,
617
+ keyField : {
618
+ type : String ,
619
+ default : null
613
620
}
614
621
} ,
615
622
@@ -671,28 +678,30 @@ var RecycleList = { render: function render() {
671
678
672
679
673
680
methods : {
674
- addView : function addView ( index , item ) {
681
+ addView : function addView ( pool , index , item , key , type ) {
675
682
var view = {
676
683
item : item ,
677
684
top : 0
678
685
} ;
679
686
var nonReactive = {
680
687
id : uid ++ ,
681
688
index : index ,
682
- used : true
689
+ used : true ,
690
+ key : key ,
691
+ type : type
683
692
} ;
684
693
Object . defineProperty ( view , 'nr' , {
685
694
configurable : false ,
686
695
value : nonReactive
687
696
} ) ;
688
- this . pool . push ( view ) ;
697
+ pool . push ( view ) ;
689
698
return view ;
690
699
} ,
691
700
unuseView : function unuseView ( view ) {
692
701
var fake = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : false ;
693
702
694
703
var unusedViews = this . $_unusedViews ;
695
- var type = view . item [ this . typeField ] ;
704
+ var type = view . nr . type ;
696
705
var unusedPool = unusedViews . get ( type ) ;
697
706
if ( ! unusedPool ) {
698
707
unusedPool = [ ] ;
@@ -702,7 +711,7 @@ var RecycleList = { render: function render() {
702
711
if ( ! fake ) {
703
712
view . nr . used = false ;
704
713
view . top = - 9999 ;
705
- this . $_views . delete ( view . item ) ;
714
+ this . $_views . delete ( view . nr . key ) ;
706
715
}
707
716
} ,
708
717
handleResize : function handleResize ( ) {
@@ -757,6 +766,7 @@ var RecycleList = { render: function render() {
757
766
758
767
var itemHeight = this . itemHeight ;
759
768
var typeField = this . typeField ;
769
+ var keyField = this . keyField ;
760
770
var items = this . items ;
761
771
var count = items . length ;
762
772
var heights = this . heights ;
@@ -821,7 +831,7 @@ var RecycleList = { render: function render() {
821
831
822
832
var view = void 0 ;
823
833
824
- var continuous = startIndex < this . $_endIndex && endIndex > this . $_startIndex ;
834
+ var continuous = startIndex <= this . $_endIndex && endIndex >= this . $_startIndex ;
825
835
var unusedIndex = void 0 ;
826
836
827
837
if ( this . $_continuous !== continuous ) {
@@ -839,7 +849,9 @@ var RecycleList = { render: function render() {
839
849
view = pool [ _i2 ] ;
840
850
if ( view . nr . used ) {
841
851
// Update view item index
842
- if ( checkItem ) view . nr . index = items . indexOf ( view . item ) ;
852
+ if ( checkItem ) view . nr . index = items . findIndex ( function ( item ) {
853
+ return keyField ? item [ keyField ] == view . item [ keyField ] : item === view . item ;
854
+ } ) ;
843
855
844
856
// Check if index is still in visible range
845
857
if ( view . nr . index === - 1 || view . nr . index < startIndex || view . nr . index > endIndex ) {
@@ -859,7 +871,8 @@ var RecycleList = { render: function render() {
859
871
var v = void 0 ;
860
872
for ( var _i3 = startIndex ; _i3 < endIndex ; _i3 ++ ) {
861
873
item = items [ _i3 ] ;
862
- view = views . get ( item ) ;
874
+ var key = keyField ? item [ keyField ] : item ;
875
+ view = views . get ( key ) ;
863
876
864
877
if ( ! itemHeight && ! heights [ _i3 ] . height ) {
865
878
if ( view ) this . unuseView ( view ) ;
@@ -878,8 +891,10 @@ var RecycleList = { render: function render() {
878
891
view . item = item ;
879
892
view . nr . used = true ;
880
893
view . nr . index = _i3 ;
894
+ view . nr . key = key ;
895
+ view . nr . type = type ;
881
896
} else {
882
- view = this . addView ( _i3 , item , type ) ;
897
+ view = this . addView ( pool , _i3 , item , key , type ) ;
883
898
}
884
899
} else {
885
900
unusedPool = unusedViews . get ( type ) ;
@@ -892,14 +907,16 @@ var RecycleList = { render: function render() {
892
907
view . item = item ;
893
908
view . nr . used = true ;
894
909
view . nr . index = _i3 ;
910
+ view . nr . key = key ;
911
+ view . nr . type = type ;
895
912
unusedIndex . set ( type , v + 1 ) ;
896
913
} else {
897
- view = this . addView ( _i3 , item , type ) ;
914
+ view = this . addView ( pool , _i3 , item , key , type ) ;
898
915
this . unuseView ( view , true ) ;
899
916
}
900
917
v ++ ;
901
918
}
902
- views . set ( item , view ) ;
919
+ views . set ( key , view ) ;
903
920
} else {
904
921
view . nr . used = true ;
905
922
}
@@ -931,7 +948,7 @@ function registerComponents(Vue, prefix) {
931
948
932
949
var plugin$4 = {
933
950
// eslint-disable-next-line no-undef
934
- version : "0.11.5 " ,
951
+ version : "0.11.7 " ,
935
952
install : function install ( Vue , options ) {
936
953
var finalOptions = Object . assign ( { } , {
937
954
installComponents : true ,
0 commit comments