1

私は JavaScript とバックボーンにかなり慣れていないので、このエラーに遭遇しました。

Router = Backbone.Router.extend({

    routes: {
        ":albumID": "load"

    },

    load: function (albumID) {
        if (controller.collectionInitialized == true) {
            console.log("RESET");
            album.trigger("clear");
        }

        var album = new Album([], {
            title: albumID
        });

        controller.trigger("collectionInit");
        controller.trigger("switchAlbum", albumID);
    }
});

Controller = Backbone.Model.extend({

    currentAlbum: "",
    collectionInitialized: false,

    initialize: function () {
        console.log("controller is initialized");
        this.on("switchAlbum", function (newAlbum) {
            this.currentAlbum = newAlbum;

        });

        this.on("collectionInit", function () {
            this.collectionInitialized = true;
        });
    }
});

Album = Backbone.Collection.extend({

    initialize: function (models, options) {
        this.on("clear", this.clear);
    },
    clear: function () {
        this.reset();
        this.off();
    }

});

次のエラーが表示されます: Unable to get property 'trigger' of undefined or null reference。このifステートメントは、albumがトリガーされる前に が既に存在することを確認しclearます。album.reset()以前は直接呼び出してみましたが、同じエラーが発生しました。私の推測では、それはある種のスコーピングの問題だと思います。誰かが私を正しい方向に向けてもらえますか?

4

2 に答える 2

1

Javascript では変数が であることは事実です。つまり、変数はfunction-scopedローカル スコープ (つまり、関数ホスト) 全体で表示されますが、インスタンス化は別の獣です。

load: function (albumID) {

    if (controller.collectionInitialized == true) {
        console.log("RESET");
        album.trigger("clear");
    }

    var album = new Album([], {
        title: albumID
    });

    controller.trigger("collectionInit");
    controller.trigger("switchAlbum", albumID);
}   

アルバムでメソッドを呼び出したnew Album に作成するtriggerと、null 参照になります。

また、関数を 2 回呼び出しても (つまり、1 回目はcontroller.collectionInitializedasfalseで、2 回目は as true)、変数albumは関数に対してローカルであるため、本体に入ると常に未定義になりますif。そのスコープは functionloadであるためです。の体の終わりに到達するたびに「死にます」。load

Amith Georgealbumはあなたの問題に対する正しい解決策を提供します: 1 つ上のスコープ レベル (つまり、extendメソッド変数を定義します。

于 2013-05-08T16:31:46.097 に答える