2016-07-11 12 views
1

löst ich verwende Ember 2.6.0EmberJS - Call Super Aktion nach Versprechen

Ich bin eine dritte Partei Komponente erstreckt, die einige Funktionen in einer Aktion definiert hat, und ich möchte, dass die Aktion in meine Unterklasse fangen, nennen Funktion, die eine Verheißung zurückgibt und die Superaktion auslöst, wenn das Versprechen verrechnet wird.

So die Dritte Komponente tut dies:

import Ember from 'ember'; 

export default Ember.Component.extend({ 
    actions: { 
    theAction() { 
     this._somePrivateFunction(); 
     //do other stuff 
    } 
    } 
}); 

Und in meiner Unterklasse ich tue:

import Ember from 'ember'; 
import ThirdPartyComponent from 'path/to/component' 

export default ThirdPartyComponent.extend({ 
    _funcThatReturnsPromise() { 
    return new Ember.RSVP.Promise(); 
    } 
    actions: { 
    theAction() { 
     const thePromise = this._funcThatReturnsPromise(); 
     thePromise.then(() => { 
      // undefined! 
      this._super(...arguments); 
     }) 
    } 
    } 
}); 

this._super() nicht an die übergeordneten Komponente Aktion löst, wenn sie in den Versprechungen Rückruf genannt. Ich habe versucht, die super Funktion als Eigenschaft zu speichern und nennt es:

theAction() { 
      const thePromise = this._funcThatReturnsPromise(); 
      this.set('superFunc', this._super); 
      thePromise.then(() => { 
      // calls the super but "this" inside the supers action is undefined 
      this._super(...arguments); 
     }) 
    } 

Dies, zusätzlich zu hässlich, Ergebnisse in this innerhalb der Aktion supers werden nicht definiert. Ich bin mir nicht sicher, warum das ist ... durch einige Dokumente schauen.

Es besteht auch die Möglichkeit, send() in meiner Subklassen Aktion Aufruf:

theAction() { 
     const thePromise = this._funcThatReturnsPromise(); 
     this.set('superFunc', this._super); 
     thePromise.then(() => { 
      //infinite loop! 
      this.send('theAction'); 
     }); 
    } 

Aber diese natürlich Ergebnisse in einer Endlos-Schleife, da die Funktion endet selbst aufrufen.

Ich bin mir nicht sicher, wie hier vorzugehen. Könnte mir jemand sagen, ob es einen sauberen Weg gibt, um das zu tun, was ich hier versuche? Jeder Rat würde geschätzt werden. Vielen Dank!

+0

Wenn Sie mit einem echten ES6 'CLASS' arbeiten,' super.theAction (...) 'würde aus der Box arbeiten. – Bergi

+0

@Bergi ja, das wäre der ideale Fall, aber ich arbeite innerhalb der Grenzen von Emberjs Komponente :-( – TheMethod

Antwort

0

In Kind Komponenten wie tun:

theAction() { 
     const thePromise = this._funcThatReturnsPromise(); 
     let parentAction = this._super; 
     let self = this; 
     thePromise.then(() => { 
      //parent usage 
      parentAction(); 

      // this usage 
      self.doSome(); 
     }); 
    } 
+0

@ Ebrahim Pasbani wie ich in meiner Frage oben gesagt habe ich bereits versucht, "dies" ist undefined innerhalb der übergeordneten Aktion, wenn sie aufgerufen – TheMethod

+0

@TheMethod Nein, Sie haben etwas anderes versucht, das Sie als Eigenschaft der Komponente festgelegt haben, die falsch sein würde –

+0

Danke für die Antwort Ob Sie einer Eigenschaft oder einer Funktionsbereichsvariablen 'this._super' zuweisen, ist es immer noch führt dazu, dass "this" undefiniert ist, wenn "elderAction()" in 'then() aufgerufen wird' – TheMethod

Verwandte Themen