refactor(change_detection): rename group memento into directive memento
This commit is contained in:
		
							parent
							
								
									1ec796a601
								
							
						
					
					
						commit
						ab733bd80e
					
				| @ -156,7 +156,7 @@ function notifyTemplate(index:number):string{ | ||||
|   return  ` | ||||
| if (${CHANGES_LOCAL} && ${CHANGES_LOCAL}.length > 0) { | ||||
|   if(throwOnChange) ${UTIL}.throwOnChange(${PROTOS_ACCESSOR}[${index}], ${CHANGES_LOCAL}[0]); | ||||
|   ${DISPATCHER_ACCESSOR}.onRecordChange(${PROTOS_ACCESSOR}[${index}].groupMemento, ${CHANGES_LOCAL}); | ||||
|   ${DISPATCHER_ACCESSOR}.onRecordChange(${PROTOS_ACCESSOR}[${index}].directiveMemento, ${CHANGES_LOCAL}); | ||||
|   ${CHANGES_LOCAL} = null; | ||||
| } | ||||
| `; | ||||
| @ -388,7 +388,7 @@ export class ChangeDetectorJITGenerator { | ||||
|   } | ||||
| 
 | ||||
|   genNotify(r):string{ | ||||
|     return r.lastInGroup ? notifyTemplate(r.selfIndex - 1) : ''; | ||||
|     return r.lastInDirective ? notifyTemplate(r.selfIndex - 1) : ''; | ||||
|   } | ||||
| 
 | ||||
|   genArgs(r:ProtoRecord):string { | ||||
|  | ||||
| @ -47,10 +47,10 @@ function _selfRecord(r:ProtoRecord, contextIndex:number, selfIndex:number):Proto | ||||
|     contextIndex, | ||||
|     selfIndex, | ||||
|     r.bindingMemento, | ||||
|     r.groupMemento, | ||||
|     r.directiveMemento, | ||||
|     r.expressionAsString, | ||||
|     r.lastInBinding, | ||||
|     r.lastInGroup | ||||
|     r.lastInDirective | ||||
|   ); | ||||
| } | ||||
| 
 | ||||
| @ -75,10 +75,10 @@ function _replaceIndices(r:ProtoRecord, selfIndex:number, indexMap:Map) { | ||||
|     contextIndex, | ||||
|     selfIndex, | ||||
|     r.bindingMemento, | ||||
|     r.groupMemento, | ||||
|     r.directiveMemento, | ||||
|     r.expressionAsString, | ||||
|     r.lastInBinding, | ||||
|     r.lastInGroup | ||||
|     r.lastInDirective | ||||
|   ); | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -54,22 +54,19 @@ export class DynamicChangeDetector extends AbstractChangeDetector { | ||||
|     var protos:List<ProtoRecord> = this.protos; | ||||
| 
 | ||||
|     var updatedRecords = null; | ||||
|     var currentGroup = null; | ||||
| 
 | ||||
|     for (var i = 0; i < protos.length; ++i) { | ||||
|       var proto:ProtoRecord = protos[i]; | ||||
|       var change = this._check(proto); | ||||
| 
 | ||||
|       if (isPresent(change)) { | ||||
|         currentGroup = proto.groupMemento; | ||||
|         var record = ChangeDetectionUtil.changeRecord(proto.bindingMemento, change); | ||||
|         updatedRecords = ChangeDetectionUtil.addRecord(updatedRecords, record); | ||||
|       } | ||||
| 
 | ||||
|       if (proto.lastInGroup && isPresent(updatedRecords)) { | ||||
|       if (proto.lastInDirective && isPresent(updatedRecords)) { | ||||
|         if (throwOnChange) ChangeDetectionUtil.throwOnChange(proto, updatedRecords[0]); | ||||
| 
 | ||||
|         this.dispatcher.onRecordChange(currentGroup, updatedRecords); | ||||
|         this.dispatcher.onRecordChange(proto.directiveMemento, updatedRecords); | ||||
|         updatedRecords = null; | ||||
|       } | ||||
|     } | ||||
|  | ||||
| @ -45,7 +45,7 @@ export const CHECK_ALWAYS="ALWAYS_CHECK"; | ||||
| export const DETACHED="DETACHED"; | ||||
| 
 | ||||
| export class ChangeDispatcher { | ||||
|   onRecordChange(groupMemento, records:List<ChangeRecord>) {} | ||||
|   onRecordChange(directiveMemento, records:List<ChangeRecord>) {} | ||||
| } | ||||
| 
 | ||||
| export class ChangeDetector { | ||||
|  | ||||
| @ -53,9 +53,9 @@ export class ProtoRecord { | ||||
|   contextIndex:number; | ||||
|   selfIndex:number; | ||||
|   bindingMemento:any; | ||||
|   groupMemento:any; | ||||
|   directiveMemento:any; | ||||
|   lastInBinding:boolean; | ||||
|   lastInGroup:boolean; | ||||
|   lastInDirective:boolean; | ||||
|   expressionAsString:string; | ||||
| 
 | ||||
|   constructor(mode:number, | ||||
| @ -66,10 +66,10 @@ export class ProtoRecord { | ||||
|               contextIndex:number, | ||||
|               selfIndex:number, | ||||
|               bindingMemento:any, | ||||
|               groupMemento:any, | ||||
|               directiveMemento:any, | ||||
|               expressionAsString:string, | ||||
|               lastInBinding:boolean, | ||||
|               lastInGroup:boolean) { | ||||
|               lastInDirective:boolean) { | ||||
| 
 | ||||
|     this.mode = mode; | ||||
|     this.name = name; | ||||
| @ -79,9 +79,9 @@ export class ProtoRecord { | ||||
|     this.contextIndex = contextIndex; | ||||
|     this.selfIndex = selfIndex; | ||||
|     this.bindingMemento = bindingMemento; | ||||
|     this.groupMemento = groupMemento; | ||||
|     this.directiveMemento = directiveMemento; | ||||
|     this.lastInBinding = lastInBinding; | ||||
|     this.lastInGroup = lastInGroup; | ||||
|     this.lastInDirective = lastInDirective; | ||||
|     this.expressionAsString = expressionAsString; | ||||
|   } | ||||
| 
 | ||||
| @ -93,7 +93,7 @@ export class ProtoRecord { | ||||
| } | ||||
| 
 | ||||
| export class ProtoChangeDetector  { | ||||
|   addAst(ast:AST, bindingMemento:any, groupMemento:any = null, structural:boolean = false){} | ||||
|   addAst(ast:AST, bindingMemento:any, directiveMemento:any = null, structural:boolean = false){} | ||||
|   instantiate(dispatcher:any, formatters:Map):ChangeDetector{ | ||||
|     return null; | ||||
|   } | ||||
| @ -108,8 +108,8 @@ export class DynamicProtoChangeDetector extends ProtoChangeDetector { | ||||
|     this._recordBuilder = new ProtoRecordBuilder(); | ||||
|   } | ||||
| 
 | ||||
|   addAst(ast:AST, bindingMemento:any, groupMemento:any = null, structural:boolean = false) { | ||||
|     this._recordBuilder.addAst(ast, bindingMemento, groupMemento, structural); | ||||
|   addAst(ast:AST, bindingMemento:any, directiveMemento:any = null, structural:boolean = false) { | ||||
|     this._recordBuilder.addAst(ast, bindingMemento, directiveMemento, structural); | ||||
|   } | ||||
| 
 | ||||
|   instantiate(dispatcher:any, formatters:Map) { | ||||
| @ -135,8 +135,8 @@ export class JitProtoChangeDetector extends ProtoChangeDetector { | ||||
|     this._recordBuilder = new ProtoRecordBuilder(); | ||||
|   } | ||||
| 
 | ||||
|   addAst(ast:AST, bindingMemento:any, groupMemento:any = null, structural:boolean = false) { | ||||
|     this._recordBuilder.addAst(ast, bindingMemento, groupMemento, structural); | ||||
|   addAst(ast:AST, bindingMemento:any, directiveMemento:any = null, structural:boolean = false) { | ||||
|     this._recordBuilder.addAst(ast, bindingMemento, directiveMemento, structural); | ||||
|   } | ||||
| 
 | ||||
|   instantiate(dispatcher:any, formatters:Map) { | ||||
| @ -161,19 +161,19 @@ class ProtoRecordBuilder { | ||||
|     this.records = []; | ||||
|   } | ||||
| 
 | ||||
|   addAst(ast:AST, bindingMemento:any, groupMemento:any = null, structural:boolean = false) { | ||||
|   addAst(ast:AST, bindingMemento:any, directiveMemento:any = null, structural:boolean = false) { | ||||
|     if (structural) ast = new Structural(ast); | ||||
| 
 | ||||
|     var last = ListWrapper.last(this.records); | ||||
|     if (isPresent(last) && last.groupMemento == groupMemento) { | ||||
|       last.lastInGroup = false; | ||||
|     if (isPresent(last) && last.directiveMemento == directiveMemento) { | ||||
|       last.lastInDirective = false; | ||||
|     } | ||||
| 
 | ||||
|     var pr = _ConvertAstIntoProtoRecords.convert(ast, bindingMemento, groupMemento, this.records.length); | ||||
|     var pr = _ConvertAstIntoProtoRecords.convert(ast, bindingMemento, directiveMemento, this.records.length); | ||||
|     if (! ListWrapper.isEmpty(pr)) { | ||||
|       var last = ListWrapper.last(pr); | ||||
|       last.lastInBinding = true; | ||||
|       last.lastInGroup = true; | ||||
|       last.lastInDirective = true; | ||||
| 
 | ||||
|       this.records = ListWrapper.concat(this.records, pr); | ||||
|     } | ||||
| @ -183,20 +183,20 @@ class ProtoRecordBuilder { | ||||
| class _ConvertAstIntoProtoRecords { | ||||
|   protoRecords:List; | ||||
|   bindingMemento:any; | ||||
|   groupMemento:any; | ||||
|   directiveMemento:any; | ||||
|   contextIndex:number; | ||||
|   expressionAsString:string; | ||||
| 
 | ||||
|   constructor(bindingMemento:any, groupMemento:any, contextIndex:number, expressionAsString:string) { | ||||
|   constructor(bindingMemento:any, directiveMemento:any, contextIndex:number, expressionAsString:string) { | ||||
|     this.protoRecords = []; | ||||
|     this.bindingMemento = bindingMemento; | ||||
|     this.groupMemento = groupMemento; | ||||
|     this.directiveMemento = directiveMemento; | ||||
|     this.contextIndex = contextIndex; | ||||
|     this.expressionAsString = expressionAsString; | ||||
|   } | ||||
| 
 | ||||
|   static convert(ast:AST, bindingMemento:any, groupMemento:any, contextIndex:number) { | ||||
|     var c = new _ConvertAstIntoProtoRecords(bindingMemento, groupMemento, contextIndex, ast.toString()); | ||||
|   static convert(ast:AST, bindingMemento:any, directiveMemento:any, contextIndex:number) { | ||||
|     var c = new _ConvertAstIntoProtoRecords(bindingMemento, directiveMemento, contextIndex, ast.toString()); | ||||
|     ast.visit(c); | ||||
|     return c.protoRecords; | ||||
|   } | ||||
| @ -292,7 +292,7 @@ class _ConvertAstIntoProtoRecords { | ||||
|     var selfIndex = ++ this.contextIndex; | ||||
|     ListWrapper.push(this.protoRecords, | ||||
|       new ProtoRecord(type, name, funcOrValue, args, fixedArgs, context, selfIndex, | ||||
|         this.bindingMemento, this.groupMemento, this.expressionAsString, false, false)); | ||||
|         this.bindingMemento, this.directiveMemento, this.expressionAsString, false, false)); | ||||
|     return selfIndex; | ||||
|   } | ||||
| } | ||||
|  | ||||
							
								
								
									
										49
									
								
								modules/angular2/src/core/compiler/view.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										49
									
								
								modules/angular2/src/core/compiler/view.js
									
									
									
									
										vendored
									
									
								
							| @ -195,10 +195,10 @@ export class View { | ||||
|     this._dehydrateContext(); | ||||
|   } | ||||
| 
 | ||||
|   onRecordChange(groupMemento, records:List) { | ||||
|   onRecordChange(directiveMemento, records:List) { | ||||
|     this._invokeMementos(records); | ||||
|     if (groupMemento instanceof DirectivePropertyGroupMemento) { | ||||
|       this._notifyDirectiveAboutChanges(groupMemento, records); | ||||
|     if (directiveMemento instanceof DirectiveMemento) { | ||||
|       this._notifyDirectiveAboutChanges(directiveMemento, records); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
| @ -208,9 +208,9 @@ export class View { | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   _notifyDirectiveAboutChanges(groupMemento, records:List) { | ||||
|     var dir = groupMemento.directive(this.elementInjectors); | ||||
|     var binding = groupMemento.directiveBinding(this.elementInjectors); | ||||
|   _notifyDirectiveAboutChanges(directiveMemento, records:List) { | ||||
|     var dir = directiveMemento.directive(this.elementInjectors); | ||||
|     var binding = directiveMemento.directiveBinding(this.elementInjectors); | ||||
| 
 | ||||
|     if (binding.callOnChange) { | ||||
|       dir.onChange(this._collectChanges(records)); | ||||
| @ -220,13 +220,12 @@ export class View { | ||||
|     // dispatch to element injector or text nodes based on context
 | ||||
|   _invokeMementoFor(record:ChangeRecord) { | ||||
|     var memento = record.bindingMemento; | ||||
|     if (memento instanceof DirectivePropertyMemento) { | ||||
|       // we know that it is DirectivePropertyMemento
 | ||||
|       var directiveMemento:DirectivePropertyMemento = memento; | ||||
|     if (memento instanceof DirectiveBindingMemento) { | ||||
|       var directiveMemento:DirectiveBindingMemento = memento; | ||||
|       directiveMemento.invoke(record, this.elementInjectors); | ||||
| 
 | ||||
|     } else if (memento instanceof ElementPropertyMemento) { | ||||
|       var elementMemento:ElementPropertyMemento = memento; | ||||
|     } else if (memento instanceof ElementBindingMemento) { | ||||
|       var elementMemento:ElementBindingMemento = memento; | ||||
|       elementMemento.invoke(record, this.bindElements); | ||||
| 
 | ||||
|     } else { | ||||
| @ -451,7 +450,7 @@ export class ProtoView { | ||||
|     } | ||||
|     ListWrapper.push(elBinder.textNodeIndices, indexInParent); | ||||
|     var memento = this.textNodesWithBindingCount++; | ||||
|     this.protoChangeDetector.addAst(expression, memento, memento); | ||||
|     this.protoChangeDetector.addAst(expression, memento); | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
| @ -463,8 +462,8 @@ export class ProtoView { | ||||
|       elBinder.hasElementPropertyBindings = true; | ||||
|       this.elementsWithBindingCount++; | ||||
|     } | ||||
|     var memento = new ElementPropertyMemento(this.elementsWithBindingCount-1, setterName, setter); | ||||
|     this.protoChangeDetector.addAst(expression, memento, memento); | ||||
|     var memento = new ElementBindingMemento(this.elementsWithBindingCount-1, setterName, setter); | ||||
|     this.protoChangeDetector.addAst(expression, memento); | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
| @ -488,14 +487,14 @@ export class ProtoView { | ||||
|     setter:SetterFn, | ||||
|     isContentWatch: boolean) { | ||||
| 
 | ||||
|     var expMemento = new DirectivePropertyMemento( | ||||
|     var bindingMemento = new DirectiveBindingMemento( | ||||
|       this.elementBinders.length-1, | ||||
|       directiveIndex, | ||||
|       setterName, | ||||
|       setter | ||||
|     ); | ||||
|     var groupMemento = DirectivePropertyGroupMemento.get(expMemento); | ||||
|     this.protoChangeDetector.addAst(expression, expMemento, groupMemento, isContentWatch); | ||||
|     var directiveMemento = DirectiveMemento.get(bindingMemento); | ||||
|     this.protoChangeDetector.addAst(expression, bindingMemento, directiveMemento, isContentWatch); | ||||
|   } | ||||
| 
 | ||||
|   // Create a rootView as if the compiler encountered <rootcmp></rootcmp>,
 | ||||
| @ -519,7 +518,7 @@ export class ProtoView { | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| export class ElementPropertyMemento { | ||||
| export class ElementBindingMemento { | ||||
|   _elementIndex:int; | ||||
|   _setterName:string; | ||||
|   _setter:SetterFn; | ||||
| @ -535,7 +534,7 @@ export class ElementPropertyMemento { | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| export class DirectivePropertyMemento { | ||||
| export class DirectiveBindingMemento { | ||||
|   _elementInjectorIndex:int; | ||||
|   _directiveIndex:int; | ||||
|   _setterName:string; | ||||
| @ -558,9 +557,9 @@ export class DirectivePropertyMemento { | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| var _groups = MapWrapper.create(); | ||||
| var _directiveMementos = MapWrapper.create(); | ||||
| 
 | ||||
| class DirectivePropertyGroupMemento { | ||||
| class DirectiveMemento { | ||||
|   _elementInjectorIndex:number; | ||||
|   _directiveIndex:number; | ||||
| 
 | ||||
| @ -569,15 +568,15 @@ class DirectivePropertyGroupMemento { | ||||
|     this._directiveIndex = directiveIndex; | ||||
|   } | ||||
| 
 | ||||
|   static get(memento:DirectivePropertyMemento) { | ||||
|   static get(memento:DirectiveBindingMemento) { | ||||
|     var elementInjectorIndex = memento._elementInjectorIndex; | ||||
|     var directiveIndex = memento._directiveIndex; | ||||
|     var id = elementInjectorIndex * 100 + directiveIndex; | ||||
| 
 | ||||
|     if (!MapWrapper.contains(_groups, id)) { | ||||
|       MapWrapper.set(_groups, id, new DirectivePropertyGroupMemento(elementInjectorIndex, directiveIndex)); | ||||
|     if (!MapWrapper.contains(_directiveMementos, id)) { | ||||
|       MapWrapper.set(_directiveMementos, id, new DirectiveMemento(elementInjectorIndex, directiveIndex)); | ||||
|     } | ||||
|     return MapWrapper.get(_groups, id); | ||||
|     return MapWrapper.get(_directiveMementos, id); | ||||
|   } | ||||
| 
 | ||||
|   directive(elementInjectors:List<ElementInjector>) { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user