2016-07-17 2 views
-1

내 마음을 데코레이터 주위에 완전히 감싸려고하고 있는데, 나는 리플 럭스 구현에서 사용할 수있는 몇 가지 깔끔한 아이디어를 가지고있었습니다. 저장소의 클래스 메소드에 액션을 태그로 지정하고 해당 액션이 생성 될 때마다 태그가있는 메소드를 호출하는 것을 알고 있습니다. 생성자 안에, 그러나데코레이터 내에서 클래스 인스턴스 가져 오기

class Action { 
    private static methods: Method<FakeData>[] = []; 

    public static register(method: Method<FakeData>) { 
     this.methods.push(method); 
    } 

    constructor(payload: FakeData); 
    constructor(store: Store, method: string); 
    constructor(payload: any, method?: string, descriptor?: PropertyDescriptor) { 
     if (method) { 
      //TODO need actual instance of class here.... 
      Action.register(payload[method].bind(payload)); 
      return; 
     } 

     this.trigger(payload); 
    } 

    public get payload() { 
     return Math.random(); 
    } 

    private trigger(payload: FakeData) { 
     Action.methods.forEach(m => m(payload)); 
    } 
} 

: 액션 클래스에서, 나는 배열하는 방법을 등록 할 다음

@Action 
public setData(data: FakeData) { 
    console.log(this); 
    this.state.data = data; 
} 

:

우선, 내가 저장 방법을 태그 할 상점의 실제 인스턴스에 액세스 할 권한이 없습니다. 생성자를 얻을 수는 있지만 목표를 달성하는 데 사용할 수 있는지 확신 할 수 없습니다. 아마도 생성자 대신 모든 상점을 엄격하게 고정시켜야합니다.

나는이 장식을 올바른 방법으로 생각하지 않을 것이라고 확신하므로 어떤 통찰력도 인정 될 것입니다!

Link to full code on Typescript Playground

+1

그것은 분명하지 않다 네가 무엇을 요구하는지. 그리고 코드에 대한 링크가 있으면 좋지만 항상 질문에 코드를 게시해야합니다. –

+0

의견을 보내 주셔서 감사합니다. 잘하면 더 명확하게 업데이 트되었습니다. –

답변

1

그것은 장식이 클래스를 정의 할 때,하지이라고 인스턴스화 것 같습니다. 이 작업이 위해서는, 내가 정적에 모두 저장 방법을 설정했다는 것을 의미하고, 인스턴스에 접근하지 : 여기

@Action 
public static setData(data: FakeData) { 
    console.log(this); 
    this.state.data = data; 
} 

전체 작업 코드 :

Typescript Playground

관련 문제