@@ -107,9 +107,22 @@ package org.puremvc.as3.core
107
107
public function notifyObservers ( notification :INotification ) : void
108
108
{
109
109
if ( observerMap[ notification. getName() ] != null ) {
110
- var observers: Array = observerMap[ notification. getName() ] as Array ;
111
- for (var i: Number = 0 ; i < observers. length ; i++ ) {
112
- var observer: IObserver = observers[ i ] as IObserver;
110
+
111
+ // Get a reference to the observers list for this notification name
112
+ var observers_ref: Array = observerMap[ notification. getName() ] as Array ;
113
+
114
+ // Copy observers from reference array to working array,
115
+ // since the reference array may change during the notification loop
116
+ var observers: Array = new Array ();
117
+ var observer: IObserver;
118
+ for (var i: Number = 0 ; i < observers_ref. length ; i++ ) {
119
+ observer = observers_ref[ i ] as IObserver;
120
+ observers. push ( observer );
121
+ }
122
+
123
+ // Notify Observers from the working array
124
+ for (i = 0 ; i < observers. length ; i++ ) {
125
+ observer = observers[ i ] as IObserver;
113
126
observer. notifyObserver( notification );
114
127
}
115
128
}
@@ -163,6 +176,9 @@ package org.puremvc.as3.core
163
176
*/
164
177
public function registerMediator ( mediator :IMediator ) : void
165
178
{
179
+ // do not allow re-registration (you must to removeMediator fist)
180
+ if ( mediatorMap[ mediator. getMediatorName() ] != null ) return ;
181
+
166
182
// Register the Mediator for retrieval by name
167
183
mediatorMap[ mediator. getMediatorName() ] = mediator;
168
184
0 commit comments