を解決した後、私はいくつかの機能がアクションで定義されているサードパーティのコンポーネントを拡張していると私は私のサブクラスでそのアクションをキャッチしたい、Aを呼び出すエンバー2.6.0EmberJS - 約束は
を使用していますスーパーアクションを呼び出します約束を返し、約束が解決したらsupersの行動を起こす関数。
ので、サードパーティのコンポーネントは、この行います
import Ember from 'ember';
export default Ember.Component.extend({
actions: {
theAction() {
this._somePrivateFunction();
//do other stuff
}
}
});
そして、私のサブクラスでは、私がやっている:約束のコールバックで呼び出されたとき
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()
は、親コンポーネントのアクションに解決されませんが。私はプロパティとしてスーパークラスの機能を格納しようとしたし、それを呼び出しました:
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);
})
}
これ、醜いことに加えて、スーパークラスのアクション内部this
の結果は未定義されます。私はそれがなぜいくつかのドキュメントを見ているのか分かりません。
私のサブクラスでアクションsend()
を呼び出すためのオプションもあります:関数は自分自身を呼び出して終了するので、無限ループでコースの結果の
theAction() {
const thePromise = this._funcThatReturnsPromise();
this.set('superFunc', this._super);
thePromise.then(() => {
//infinite loop!
this.send('theAction');
});
}
しかし、これは。
ここに進む方法がわかりません。私がここでやろうとしていることをするためのきれいな方法があれば教えてもらえますか?アドバイスをいただければ幸いです。どうもありがとう!子コンポーネントで
'箱から出して動作します。 – Bergi
@Bergiはい、理想的なケースですが、Emberjsコンポーネントの範囲内で作業しています:-( – TheMethod