2016-07-17 8 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

関連する問題