2016-05-16 15 views
0

私は単純な問題に苦しんでいます(しかし、それはすでに私に頭痛を与えています)。 私は以下のコードがあります:「未定義」として、私はなぜが、私のためにオブジェクト1リターン知らないと私は「this.array [0]」はこの型付き配列(Typescript)の未定義のプロパティですか?

のようなJSONを返す強調するとき

interface IFoo{ 
    ReturnFirstBarObject1(): string; 
    FillBarArray(array: Array<Bar>): void; 
} 

class Bar { 
    object1: string; 
    object2: string; 
} 

class Foo implements IFoo{ 
    array: Array<Bar>; 

    constructor(){ 
    this.array = new Array<Bar>(); 
    } 

    public ReturnFirstBarObject1(): string { 
    return this.array[0].object1; 
    } 

    public FillBarArray(array: Array<Bar>): void { 
    this.array = array; 
    } 
} 

$(document).ready(function(){ 
    var foo = new Foo(); 

    $.get('url/getBars?FooID=1') 
    .done(function(data: any){ 
     foo.FillBarArray(data); 
    }); 

    var object1 = foo.ReturnFirstBarObject1(); 
}); 

"{'object1' : 'someString', 'object2' : 'someString'}" 

object1にアクセスしたいが、それは未定義を返し、typescriptが配列オブジェクトをBarとして認識するため、Jsonで回避策を実行できない。

これがなぜ起こっているのか、誰が知っていますか、Barプロパティに正しくアクセスするにはどうすればよいですか?あなたのAJAX呼び出しは、したがって、あなたが未定義のエラーを取得している、配列を埋める前に

+0

'string object1 = ...'は有効な構文ではありません。多分あなたは 'let object1:string = ...'を意味しましたか?また 'Foo'をインスタンス化しますが、' array'に値を代入することはないので、 'array [0]'は存在しません。 – Aaron

+0

クラスのバーがあり、そのプロパティにアクセスしたい場合、objOfBar ['object1']やobjOfBar.object1のような文字列インデクサーを使用してBarのオブジェクトから直接使用することができる場合は、ここで達成しようとしていることがわかりません –

+0

@申し訳ありませんが、私はすでにそれを編集しています。値はリターンによって提供されます。実際の問題は、 'undefined'を返す値です –

答えて

0

結果はjsonオブジェクトではなくjson文字列です。試してください$.getJSON

また、ReturnFirstBarObject1への呼び出し後にjqueryのコールバックが返される可能性のある@Madhu Ranjanの回答は、この問題を引き起こす可能性のある別の問題です。

1

あなたがarrayを満たしている前に、最初の要素を取得しようとしているようで、

コードの下で実行されます。

var object1 = foo.ReturnFirstBarObject1(); 

あなたは、AJAXの内側にこのコードを移動した場合、それが動作するはず呼び出し、

$.get('url/getBars?FooID=1') 
    .done(function(data: Array<Bar>){ 
    foo.FillBarArray(data); 
    var object1 = foo.ReturnFirstBarObject1(); 
}); 

・ホープ、このことができます!

+0

はい、それは確かに本当らしいです! – fips

+0

@fipsあなたはそれを持っている、私は今、本当に愚かな気分です。私のAJAXの復帰はデータでした:そして、それは配列全体にバインドしていました。私は私の質問を編集し、あなたはそれに答えると私はあなたに+1を与えるでしょう。ありがとう。 –

+0

@MadhuRanjanは助けてくれてありがとう。私が思っていたように、Jsonを返してバインディングが起こらなかった私の方法。おかげさまで、あなたはすべて最高です。 –

関連する問題