javascript - Backbone.js - 无法触发集合中的事件

标签 javascript jquery backbone.js

我是 JavaScript 和 Backbone 的新手,我遇到了这个错误。

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();
    }

});

我收到此错误:无法获取未定义或空引用的属性“触发器”if 语句确保 album 在触发 clear 之前已经存在。以前我尝试直接调用 album.reset() 但得到了同样的错误。我的猜测是这是某种范围界定问题,有人可以为我指出正确的方向吗?

最佳答案

编辑

重新阅读代码,假设 controller 是一个有效的实例并且存在,并且假设 controller.collectionInitialized 设置为 true,您基本上是在调用一个方法trigger 变量 album 的值为 null。

使用 JS 提升规则,你的加载函数可以写成

load: function(albumID) {

    var album = null;

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

    album = new Album([], { title: albumID });
    controller.trigger("collectionInit");
    controller.trigger("switchAlbum", albumID);
}

也许,上面的重写清楚地表明,即使 controller.collectionInitializedtruealbum 也是一个局部变量并且是每次调用 load 函数时总是重置为 null。

无论您使用什么机制来启用对controller 的全局访问,请使用相同的方法来启用对album 的全局访问。不要将 album 重新声明为函数的本地。

...

阅读更多关于 Javascript variable and function hoisting 的内容可能会有所帮助.

关于javascript - Backbone.js - 无法触发集合中的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16445626/

相关文章:

javascript - 我看不到我的动画,而是看到显示和隐藏效果之类的东西?

javascript - 我如何使用 jQuery 计算其他 div 中选择的类中的 div 的数量

javascript - sails.js 中的主干

javascript - JavaScript 正则表达式中的 type=number 和 type=text 有什么区别?

javascript - 使用独立代码确定浏览器宽度

javascript - jQuery 如何选择 <foo.bar></foo.bar> 节点

javascript - If 子句无法正常工作

javascript - Backbone Jquery Click 在 iOS 上出现巨大延迟

backbone.js - 基于backbone.js 的许多框架在现实世界中的优势和劣势是什么?

javascript - element.setAttribute ('style' , 'attribute :value;' ) 与 element.attribute = 'value'