@@ -9,7 +9,10 @@ import {
99 HostListener ,
1010 IterableDiffers ,
1111 IterableDiffer ,
12- ChangeDetectorRef } from 'angular2/core' ;
12+ ChangeDetectorRef ,
13+ EventEmitter ,
14+ Output } from 'angular2/core' ;
15+ import { isListLikeIterable } from 'angular2/src/facade/collection' ;
1316import { Observable as RxObservable } from 'rxjs'
1417import { ListView } from 'ui/list-view' ;
1518import { View } from 'ui/core/view' ;
@@ -18,6 +21,12 @@ import {ObservableArray} from 'data/observable-array';
1821import { LayoutBase } from 'ui/layouts/layout-base' ;
1922const NG_VIEW = "_ngViewRef" ;
2023
24+ interface SetupItemViewArgs {
25+ view : EmbeddedViewRef ;
26+ data : any ;
27+ index : number ;
28+ }
29+
2130@Component ( {
2231 selector : 'ListView' ,
2332 template : `` ,
@@ -28,6 +37,8 @@ export class ListViewComponent {
2837 private _items : any ;
2938 private _differ : IterableDiffer ;
3039
40+ @Output ( ) public setupItemView : EventEmitter < SetupItemViewArgs > = new EventEmitter < SetupItemViewArgs > ( ) ;
41+
3142 @ContentChild ( TemplateRef ) itemTemplate : TemplateRef ;
3243
3344 set items ( value : any ) {
@@ -36,7 +47,7 @@ export class ListViewComponent {
3647 if ( value instanceof ObservableArray ) {
3748 needDiffer = false ;
3849 }
39- if ( needDiffer && ! this . _differ && value ) {
50+ if ( needDiffer && ! this . _differ && isListLikeIterable ( value ) ) {
4051 this . _differ = this . _iterableDiffers . find ( this . _items ) . create ( this . _cdr , ( index , item ) => { return item ; } ) ;
4152 }
4253 this . listView . items = this . _items ;
@@ -45,8 +56,8 @@ export class ListViewComponent {
4556 private timerId : number ;
4657 private doCheckDelay = 5 ;
4758
48- constructor ( private _elementRef : ElementRef ,
49- private _iterableDiffers : IterableDiffers ,
59+ constructor ( private _elementRef : ElementRef ,
60+ private _iterableDiffers : IterableDiffers ,
5061 private _cdr : ChangeDetectorRef ,
5162 private _appViewManager : AppViewManager ) {
5263 this . listView = _elementRef . nativeElement ;
@@ -82,6 +93,7 @@ export class ListViewComponent {
8293 viewRef . setLocal ( "index" , index ) ;
8394 viewRef . setLocal ( 'even' , ( index % 2 == 0 ) ) ;
8495 viewRef . setLocal ( 'odd' , ( index % 2 == 1 ) ) ;
96+ this . setupItemView . next ( { 'view' : viewRef , 'data' : data , 'index' : index } ) ;
8597 }
8698
8799 ngDoCheck ( ) {
0 commit comments