@@ -289,6 +289,7 @@ if (TRACKED_INITIAL_TASK_STATE) {
289
289
290
290
Object . assign ( Task . prototype , TASKABLE_MIXIN ) ;
291
291
292
+ const currentTaskInstanceSymbol = '__ec__encap_current_ti' ;
292
293
export class EncapsulatedTask extends Task {
293
294
constructor ( options ) {
294
295
super ( options ) ;
@@ -297,15 +298,31 @@ export class EncapsulatedTask extends Task {
297
298
this . _encapsulatedTaskInstanceProxies = new WeakMap ( ) ;
298
299
}
299
300
301
+ _getEncapsulatedTaskClass ( ) {
302
+ let encapsulatedTaskImplClass = this . _encapsulatedTaskImplClass ;
303
+
304
+ if ( ! encapsulatedTaskImplClass ) {
305
+ encapsulatedTaskImplClass = EmberObject . extend ( this . taskObj , {
306
+ unknownProperty ( key ) {
307
+ let currentInstance = this [ currentTaskInstanceSymbol ] ;
308
+ return currentInstance ? currentInstance [ key ] : undefined ;
309
+ } ,
310
+ } ) ;
311
+ }
312
+
313
+ return encapsulatedTaskImplClass ;
314
+ }
315
+
300
316
_taskInstanceFactory ( args , performType ) {
301
317
let owner = getOwner ( this . context ) ;
302
- let encapsulatedTaskImpl = EmberObject . extend ( this . taskObj ) . create ( {
318
+ let taskInstanceProxy ;
319
+ let encapsulatedTaskImpl = this . _getEncapsulatedTaskClass ( ) . create ( {
303
320
context : this . context ,
304
321
} ) ;
305
322
setOwner ( encapsulatedTaskImpl , owner ) ;
306
323
307
324
let generatorFactory = ( ) =>
308
- encapsulatedTaskImpl . perform . apply ( encapsulatedTaskImpl , args ) ;
325
+ encapsulatedTaskImpl . perform . apply ( taskInstanceProxy , args ) ;
309
326
let taskInstance = new TaskInstance ( {
310
327
task : this ,
311
328
args,
@@ -317,10 +334,13 @@ export class EncapsulatedTask extends Task {
317
334
performType,
318
335
hasEnabledEvents : this . hasEnabledEvents ,
319
336
} ) ;
337
+ encapsulatedTaskImpl [ currentTaskInstanceSymbol ] = taskInstance ;
320
338
321
339
this . _encapsulatedTaskStates . set ( taskInstance , encapsulatedTaskImpl ) ;
322
340
323
- return this . _wrappedEncapsulatedTaskInstance ( taskInstance ) ;
341
+ taskInstanceProxy = this . _wrappedEncapsulatedTaskInstance ( taskInstance ) ;
342
+
343
+ return taskInstanceProxy ;
324
344
}
325
345
326
346
_wrappedEncapsulatedTaskInstance ( taskInstance ) {
0 commit comments