2017-10-24 20 views
0

からメソッドにアクセスすることはできません。残念ながら、これは動作していません。は、私は次のモデルを持っているモデル

私はのような何かを行う場合は、次のthis.eventsはタイプEventLogModel[]である

for (let ec of this.events[0].getEventConsumers()) { 
    console.log(ec.getStatus()); 
} 

を。 ec.getStatus is not a functionというエラーが表示されます。

this.eventsを取り込むための私のサービスは次のようになります。

public getEvents(batchId: string): Observable<EventLogModel[]> { 
    return this.http.get(EVENTS_URL + batchId + EVENTS_ENDPOINT) 
     .map((res: Response) => { 
     const events = res.json().eventList; 
     return events.map((e) => new EventLogModel(e)); 
     }) 
     .catch(this.handleErrorObservable); 
} 

と、典型的なJSON応答は次のようになります。

"batchId": "2c9180855f359542015f35aa2d460d74", 
    "status": "REJECTED", 
    "createdTime": "2017-10-19T17:24:26Z", 
    "eventList": [ 
    { 
     "unique_id": 200168014, 
     "id": "12091792-9020-4311-8bad-44fa8b69d218", 
     "event_type": "com.adp.pi.eventmachine.PayFileProcessingCompleted", 
     "partition_key": "2c9180855f359542015f35aa2d460d74", 
     "occurred_on": "2017-10-19T17:24:26", 
     "trace_id": "-8551048985939099152", 
     "event_version": "1", 
     "producedDomain": "PAY_FILE_STATUS", 
     "eventConsumers": [ 
     { 
      "status": "COMPLETED", 
      "listener": "com.clientmanagement.hr.presentation.event.PayFileProcessingCompletedEventHandler", 
      "consumedOn": "2017-10-19T17:24:27", 
      "consumedDomain": "POLICY" 
     } 
     ], 
     "consumedOn": "2017-10-19T17:24:27" 
    } 
    ] 
} 

私が間違ってやっている任意のアイデア?私は最終的にバインディングでHTMLのgetStatus()関数を使用できるようにしたいと思います。

編集:これは決してEventConsumerModelを作成していないようです。私はそのモデルのコンストラクタにconsole.log()を入れて何も出てこなかった。私のサービスのオブジェクトをどのようにマッピングしているかと関係があります。しかし、私はそれを修正する方法を知らない。

答えて

1

問題はコンストラクタ内にObject.assign(this, values);があり、入力をメンバー変数にマップしますが、インスタンスは作成していません。したがって、eventConsumersメンバーはオブジェクトの配列に過ぎず、EventConsumerModelというインスタンスの配列ではありません。私はそのインターフェイスを必要としないのはなぜ

interface EventLogResponse { 
    id?: number, 
    event_type?: string, 
    occured_on?: string, 
    producedDomain?: string, 
    eventConsumers?: Object[] 
} 

export class EventLogModel { 

    private id: number; 
    private event_type: string; 
    private occurred_on: string; 
    private producedDomain: string; 
    private eventConsumers: EventConsumerModel[]; 

    constructor({ 
    eventConsumers, 
    ...obj 
    }: EventLogResponse = {}) { 
    Object.assign(this, obj); 
    this.eventConsumers = eventConsumers.map(ec => new EventConsumerModel(ev)); 
    } 

    public getEventConsumers(): EventConsumerModel[] { 
    return this.eventConsumers; 
    } 
} 
+0

だから、明示的eventConsumersのメンバ変数を設定する必要がありますか? – Nxt3

+0

レスポンスタイプを知っているだけで、それを持つことは重要ではありません。あなたはそれを省略することができます – cyrix

+0

どのようにインターフェイスなしでそれを書くだろうか?あなたは単に 'EventLogResponse = {}'を 'Object = {}'に変更することはできません。 – Nxt3

関連する問題