0

私の問題:

コードの一部をリファクタリングし、長い無名関数に名前を付けています。残念ながら、それは私が理解できない方法でアプリを壊します.

コード

匿名バージョンは正常に動作しますが、

アラート (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 つの関数の動作が異なるのはなぜですか。名前付き関数を宣言して、匿名関数のように動作させるにはどうすればよいですか。

4

2 に答える 2

1

これは名前付き関数ではありません。関数を という変数に割り当てていますaddCollections。あなたの問題は、ここで参照を渡す代わりに関数を呼び出していることです:

$.when(leads.fetch({ data: $.param({ departementCode: departementCode }) }), distributeurs.fetch({ data: $.param({ departementCode: departementCode }) })).done(
            addCollections()
        );

かっこを削除します。

$.when(leads.fetch({ data: $.param({ departementCode: departementCode }) }), distributeurs.fetch({ data: $.param({ departementCode: departementCode }) })).done(
                addCollections
            );
于 2013-05-31T09:46:11.007 に答える