@@ -36,9 +36,9 @@ function commonSetup() {
36
36
}
37
37
} ) ;
38
38
39
- registerHelper ( 'each' , function ( params ) {
39
+ registerHelper ( 'each' , function ( params , hash , blocks ) {
40
40
var list = params [ 0 ] ;
41
-
41
+ if ( list . length !== 0 ) {
42
42
for ( var i = 0 , l = list . length ; i < l ; i ++ ) {
43
43
var item = list [ i ] ;
44
44
if ( this . arity > 0 ) {
@@ -47,6 +47,9 @@ function commonSetup() {
47
47
this . yieldItem ( item . key , undefined , item ) ;
48
48
}
49
49
}
50
+ } else if ( blocks . inverse . yield ) {
51
+ blocks . inverse . yield ( ) ;
52
+ }
50
53
} ) ;
51
54
52
55
}
@@ -490,6 +493,27 @@ test("MorphLists in childNodes are properly cleared", function() {
490
493
strictEqual ( destroyedRenderNodeCount , 6 , "cleanup hook was invoked again" ) ;
491
494
} ) ;
492
495
496
+ test ( "MorphLists in each else are properly cleared" , function ( ) {
497
+ var template = compile ( `{{#each items as |item|}}<div>{{item.name}}</div>{{else}}<div>{{noItems}}</div>{{/each}}` ) ;
498
+
499
+ let a1 = { key : "a" , name : "A1" } ;
500
+ let a2 = { key : "a" , name : "A2" } ;
501
+ var object = { items : [ ] , noItems : "items not found" } ;
502
+
503
+ var result = template . render ( object , env ) ;
504
+ equalTokens ( result . fragment , `<div>items not found</div>` ) ;
505
+
506
+ object . items . push ( a1 ) ;
507
+ object . items . push ( a2 ) ;
508
+ result . rerender ( env , object ) ;
509
+
510
+ equalTokens ( result . fragment , "<div>A1</div><div>A2</div>" ) ;
511
+ strictEqual ( destroyedRenderNodeCount , 1 , "cleanup hook was invoked for else morph" ) ;
512
+
513
+ result . rerender ( env , { items : [ ] } ) ;
514
+ strictEqual ( destroyedRenderNodeCount , 5 , "cleanup hook was invoked for each morph" ) ;
515
+ } ) ;
516
+
493
517
test ( "Pruned render nodes invoke a cleanup hook when cleared" , function ( ) {
494
518
var object = { condition : true , value : 'hello world' } ;
495
519
var template = compile ( '<div>{{#if condition}}<p>{{value}}</p>{{/if}}</div>' ) ;
0 commit comments