2016-10-23 4 views
1

条件でEmberクラスを拡張することはできますか?このような何か:条件でEmberクラスを拡張する

A.reopen({ 
    if (condition) { 
    init: function() { 
     this.super(); 
     // some functionality 
    }.on('didInsertElement'); 
    } 
}) 

現在、私はこのようなパターンを持っている:

A.reopen({ 
    if (condition) { 
    init: function() { 
     this.super(); 
     // some functionality 
    }.on('didInsertElement'), 

    clear_up: function() { 
     // some stuff 
    }.on('willDestroyElement') 
    } 
}) 

すべて:

A.reopen({ 
    init: function() { 
    this.super(); 
    if (condition) { 
     // some stuff 
    } 
    }.on('didInsertElement'), 

    cleanup: function() { 
    if (condition) { 
     // some stuff 
    } 
    }.on('willDestroyElement') 
}) 

は、私は条件にクラスを拡張することができれば、私はこのように私のパターンを簡素化することができます推測プラグインで作成したクラス拡張機能discourse

+1

なぜ、1行目と2行目を切り替えるのですか?どのクラスを再オープンし、ユースケースは何ですか? – Keo

+0

@Keo私のケースを明確にするために質問を更新しました – megas

+1

Keoの回答はあなたに役立ちませんか? 'if(条件){ A.reopen({' – ykaragol

答えて

0

Javaの中で抽象クラスと呼ばれるもの

Ember.Component.extend({ // abstract class 

    doSomeInit: Ember.K, 

    doSomeCleaning: Ember.K, 

    didInsertElement: function() { 
    this.super(..arguments); 
    this.doSomeInit(); 
    }, 

    willDestroyElement: function() { 
    this.doSomeCleaning(); 
    } 
}) 

// class A 
Ember.Component.extend(MyIncompleteClass, { 

    doSomeInit: function() { /* etc */ }, 

    doSomeCleaning: function() { /* etc */ } 

}); 

// class B 
Ember.Component.extend(MyIncompleteClass, { 

    doSomeInit: function() { /* etc */ }, 

    doSomeCleaning: function() { /* etc */ } 

}); 

追記:実行順序を保証するために、Ember.onを使用するよりも、ライフサイクルフックを上書きするのが最善です。それは同じイベントのために複数のEmber.onの場合です。

+1

プラグインからemberクラスを拡張していますが、自分のクラスを抽象的に作成することはできません。 – megas

+0

あなたの質問をそのビットで更新していますか? ?(ember cli addon、私は仮定する) – givanse

関連する問題