@@ -474,6 +474,9 @@ namespace xml2ui {
474474
475475 export class MultiTemplateParser implements XmlStateConsumer {
476476 private _childParsers = new Array < TemplateParser > ( ) ;
477+ private _value : KeyedTemplate [ ] ;
478+
479+ get value ( ) : KeyedTemplate [ ] { return this . _value ; }
477480
478481 constructor ( private parent : XmlStateConsumer , private templateProperty : TemplateProperty ) {
479482 }
@@ -496,8 +499,8 @@ namespace xml2ui {
496499 createView : this . _childParsers [ i ] . buildTemplate ( )
497500 } ) ;
498501 }
499- this . templateProperty . parent . component [ this . templateProperty . name ] = templates ;
500- return this . parent ;
502+ this . _value = templates ;
503+ return this . parent . parse ( args ) ;
501504 }
502505 }
503506
@@ -564,11 +567,12 @@ namespace xml2ui {
564567
565568 var name = ComponentParser . getComplexPropertyName ( args . elementName ) ;
566569
567- this . complexProperties . push ( {
570+ const complexProperty : ComponentParser . ComplexProperty = {
568571 parent : parent ,
569572 name : name ,
570- items : [ ] ,
571- } ) ;
573+ items : [ ]
574+ } ;
575+ this . complexProperties . push ( complexProperty ) ;
572576
573577 if ( ComponentParser . isKnownTemplate ( name , parent . exports ) ) {
574578 return new TemplateParser ( this , {
@@ -583,7 +587,7 @@ namespace xml2ui {
583587 }
584588
585589 if ( ComponentParser . isKnownMultiTemplate ( name , parent . exports ) ) {
586- return new MultiTemplateParser ( this , {
590+ const parser = new MultiTemplateParser ( this , {
587591 context : ( parent ? getExports ( parent . component ) : null ) || this . context , // Passing 'context' won't work if you set "codeFile" on the page
588592 parent : parent ,
589593 name : name ,
@@ -592,6 +596,8 @@ namespace xml2ui {
592596 errorFormat : this . error ,
593597 sourceTracker : this . sourceTracker
594598 } ) ;
599+ complexProperty . parser = parser ;
600+ return parser ;
595601 }
596602
597603 } else {
@@ -628,7 +634,9 @@ namespace xml2ui {
628634 } else if ( args . eventType === xml . ParserEventType . EndElement ) {
629635 if ( ComponentParser . isComplexProperty ( args . elementName ) ) {
630636 if ( complexProperty ) {
631- if ( parent && ( < any > parent . component ) . _addArrayFromBuilder ) {
637+ if ( complexProperty . parser ) {
638+ parent . component [ complexProperty . name ] = complexProperty . parser . value ;
639+ } else if ( parent && ( < any > parent . component ) . _addArrayFromBuilder ) {
632640 // If parent is AddArrayFromBuilder call the interface method to populate the array property.
633641 ( < any > parent . component ) . _addArrayFromBuilder ( complexProperty . name , complexProperty . items ) ;
634642 complexProperty . items = [ ] ;
@@ -643,7 +651,7 @@ namespace xml2ui {
643651 }
644652 }
645653
646- return this ;
654+ return this ;
647655 }
648656
649657 private static isComplexProperty ( name : string ) : boolean {
@@ -692,6 +700,7 @@ namespace xml2ui {
692700 parent : ComponentModule ;
693701 name : string ;
694702 items ?: Array < any > ;
703+ parser ?: { value : any ; } ;
695704 }
696705 }
697706}
0 commit comments