私の問題:
コードの一部をリファクタリングし、長い無名関数に名前を付けています。残念ながら、それは私が理解できない方法でアプリを壊します.
コード
匿名バージョンは正常に動作しますが、
アラート (distributeurs.length);
は 0 とは異なります。
var group = this.settings.group, //group used to store all the markers added to the map
leads = this.model.get("leads"), // collection of leads
distributeurs = new Distributeurs(), // collection of distributeurs
map = this.settings.map,
addLeadsCollection = this.addLeadsCollectionFnContructor();
//ajax calls to populate collection
$.when(leads.fetch({ data: $.param({ departementCode: departementCode }) }), distributeurs.fetch({ data: $.param({ departementCode: departementCode }) })).done(
function () //the function
{
alert( distributeurs.length ); //the alert
distributeurs.map( function ( distributeur )
{
addLeadsCollection( leads.filter( function ( lead )
{
return distributeur.get( "id" ) === lead.get( "distribution" );
}
) );
}
);
}
);
名前付きバージョン: それは何もしません
アラート (distributeurs.length);
値は常に 0 です。
var group = this.settings.group, //group used to store all the markers added to the map
leads = this.model.get("leads"), // collection of leads
distributeurs = new Distributeurs(), // collection of distributeurs
map = this.settings.map,
addLeadsCollection = this.addLeadsCollectionFnContructor();
//the function
var addCollections = function() {
alert(distributeurs.length); //the alert
distributeurs.map(function(distributeur) {
addLeadsCollection(leads.filter(function(lead) {
return distributeur.get("id") === lead.get("distribution");
}
));
}
);
};
//ajax calls to populate collection
$.when(leads.fetch({ data: $.param({ departementCode: departementCode }) }), distributeurs.fetch({ data: $.param({ departementCode: departementCode }) })).done(
addCollections()
);
私の質問
これら 2 つの関数の動作が異なるのはなぜですか。名前付き関数を宣言して、匿名関数のように動作させるにはどうすればよいですか。