2016-10-23 6 views
1

엠버 클래스를 조건부로 확장 할 수 있습니까? 이런 식으로 뭔가 : 상태에서 엠버 클래스 확장하기

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

은 현재 내가 가지고 같은 패턴 :

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

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

나는 이런 내 패턴을 단순화 할 수 있습니다 조건으로 클래스를 확장 할 수 있는지 짐작 :

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

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

모두 플러그인에서 만든 클래스 확장 discourse

+1

왜 첫 번째와 두 번째 줄을 전환하지 않습니까? 재개하려는 클래스와 사용 사례는 무엇입니까? – Keo

+0

@Keo 사례를 명확히하기 위해 질문을 업데이트했습니다. – megas

+1

Keo의 답변이 도움이되지 않습니까? 'if (condition) { 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

플러그인에서 엠버 클래스를 확장하고 있는데, 심지어 내 자신의 클래스를 추상적으로 만들 수 없습니다. – megas

+0

플러그인에서 어떻게 확장하고 있습니까? ? (ember cli addon, 나는 생각한다) – givanse