2017-10-24 14 views
0

TypeError例外:getPositionはない機能私のxx.model.tsから

export class ReferenceObject { 
    name: string; 
    position: Position; 
    public getPosition() : Member { 
    return this.position; 
    } 
} 

export class Position { 
    latitude: number; 
    longitude: number; 
} 

そして、私のmap.component.tsから:

allObjects : ReferenceObject[] = []; 

// allObjects is subscribed to an observable from xx.service.ts 

private renderReferenceObjects() { 
    var i = 0; 
    this.allObjects.forEach (nextObject => { 
    this.objects[i] = this.viewer.entities.add ({ 
     name : nextObject.name, 
     position : Cesium.Cartesian3.fromDegrees(nextObject.getPosition().longitude, nextObject.getPosition().latitude), 
     billboard : { 
     scale : 1.0, 
     image : 'assets/img.png' 
     } 
    }); 
    } 
}); 

問題は何ですか?なぜこの方法にアクセスできないのですか?これはpublicに設定されており、上記のようにnextObject.nameを参照できますが、問題はありません。それは私がエラーが現れるそのメンバー関数にアクセスしようとする行に着くまでではありません。

注:私はコードを見直しましたが、正しく見えますが、タイプミスがある可能性があります。私はこのコードを転記するときに多くの変更を加えなければなりませんでした。コードが翻訳されたり実行されたりするのを防ぐ主要なタイプミスがあれば、それは間違いなく私の問題の原因ではありませんが、コメントで指摘して訂正してください。

編集: nextObject.getPosition()のすべてのインスタンスをnextObject.positionに置き換えると、完全に機能しました。私はまだそれがなぜ機能するのかについて非常に興味がありますが、方法はそうではありません。

答えて

0

ゲッターを使用する代わりに、メンバー変数を参照するdirectyでコードを実行させることができました。具体的には、nextObject.getPosition()のすべてのインスタンスをnextObject.positionに置き換えましたが、このメソッドを呼び出すことがうまくいかなかったのは不思議です。

+0

allObjectは、各nextObjectがReferenceObjectであるように、ReferenceObjectクラスの配列を参照する必要があります。 –

+0

@ DanielH.J。そうです。 –

2

あなたはallObjectsをループしている:

this.allObjects.forEach (nextObject => { 

回答

唯一の論理的な理由は、ReferenceObjectのインスタンスではありませんallObjectsに少なくとも1つのオブジェクトがあるということです。したがって、エラー。

+0

しかし、それはありません。 AllObjectはReferenceObjectの配列として定義され、REST APIから直接サービスレイヤにマッピングされます。 –

+0

@ClintonJ basaratはここでは正しいです、あなたはあなたのクラスを 'ReferenceObject'クラスの**インスタンス**として明示的に設定していないので、クラスメソッドにアクセスすることはできません。 Related:https://stackoverflow.com/questions/43737654/observable-map-does-not-cast-to-typescript-class – Alex

+0

したがって、allObjectsがReferenceObjectの配列として定義され、すべてのメンバーがReferenceObjectであるとしても、nextObject明示的にReferenceObjectとはみなされないのですか?あるいは私は誤解していますか? –

関連する問題