2012-03-06 2 views
8

私は基本的なバックボーンモデルを持っていますが、urlRoot属性が設定されています。サーバー側の対応するターゲットが正しいJSON出力(JSON文字列とapplication/jsonヘッダー)を返します。私はこのようなフェッチ呼び出しBackbone.jsが実際に属性を設定しないでフェッチする

:オブジェクト私は

console.log(athlete); 

を追加した場合、私はモデルを見ることができる、と放火魔でそれを検査し、私は属性を開くことができ、この時点で

var athlete = new Athlete({ id: 1 }); 
athlete.fetch(); 

とサーバーから返されたすべての値を参照してください。

が、私がしなければ:

console.log(athlete.attributes); 

console.log(athlete.get('name')); 

を私はundefined(名前は私が上記のDOM検査の属性の下に表示されます)

もやってもらいますモデルを作成するときに渡した引数である{id: 1}のみを含むオブジェクトを返します。

私はこのようなモデルを作成する場合:

var athlete = new Athlete(<JSON string copypasted from the server response>); 

そしてすべては、私が尋ねるどんな.get()メソッドの戻りが正常に動作し、athlete.attributesは、すべての値を示しています。

私は間違っていますか?

答えて

18

fetchは非同期です。つまり、フェッチ後に即時にconsole.log(athlete.get('name'))を呼び出すとデータが利用できなくなります。

使用したイベントデータが利用可能である場合など

var athlete = new Athlete({id: 1}); 
athlete.on("change", function (model) { 
    console.log(model.get('name')); 
}); 
athlete.fetch(); 

たり

var athlete = new Athlete({ id: 1 }); 
athlete.fetch({ 
    success: function (model) { 
     console.log(model.get('name')); 
    } 
}); 

をフェッチまたはfetchによって返された約束を活用するためにコールバックを追加するために、通知する:

athlete.fetch().then(function() { 
    console.log(athlete.get('name')); 
}); 
+0

もちろん、私はそれがどれほど明白であったかを指摘してくれてありがとうございます:) –

1

この例では、イベントを使用するときのクイックリマークと同じです。私の場合は、すべての変更に対してこのイベントが発生するため、changeとは動作しませんでした。だからsyncは です。

var athlete = new Athlete({id: 1}); 
athlete.on("sync", function (model) { 
    console.log(model.get('name')); 
}); 
athlete.fetch(); 
関連する問題