1

私はこれを長い間見つめていたと思いますが、フェッチが完了すると、オブジェクトをフェッチ成功メソッドの範囲外にしようとしています。

cars.fetch().complete(function(){
    newSuggested = cars.models.filter(function (model) { 
       return _.contains(model.attributes.suggestedTo, storedVin)  
    });
})
console.log(newSuggested) //undefined

正常にフェッチされた後、スコープnewSuggested外に取得するにはどうすればよいですか?fetch

4

2 に答える 2

1

コードのどこかで宣言していない限りnewSuggested、それはウィンドウ上のグローバル変数です (これは問題ではなく、指摘しているだけです)。

ログに記録している場所が定義されていない理由は、そのconsole.logステートメントが実行されたときにフェッチが完了していないためです。

で何をするにしても、コールバック関数newSuggested内から実行する必要があります。complete

// declare the variable using var, so it is not global
var newSuggested;
cars.fetch().complete(function(){
    newSuggested = cars.models.filter(function (model) { 
       return _.contains(model.attributes.suggestedTo, storedVin)  
    });
    console.log(newSuggested); // works!
    // do something with newSuggested here, hard to tell what you are trying to do.
    probablyUpdateViewInSomeWay(newSuggested);
});
// fetch not complete here!
// this is not a scope problem, but an async problem.
// complete callback has not been called yet.
console.log(newSuggested) //undefined, this is expected

補足:completeは jQuery 1.8 で廃止されたため、代わりに使用する必要がありますdone

于 2013-02-28T16:23:34.727 に答える
0

スクリプトは正しいですwindow.newSuggested。変数をグローバルにするために明示的に使用することもできます(デフォルトはこのようになっています)。console.log実行フローの呼び出し順序として「完了」の後を移動する必要があります

cars.fetch().complete(function(){
    window.newSuggested = cars.models.filter(function (model) { 
       return _.contains(model.attributes.suggestedTo, storedVin)  
    });
    global_log();
})

function global_log(){console.log(newSuggested);};
于 2013-02-28T16:30:37.323 に答える