Backbone.Marionette.Controller throws "Uncaught TypeError: r.apply is not a function"

Backbone.Marionette.Controller throws "Uncaught TypeError: r.apply is not a function"

我想 运行 我的 Backbone.Marionette 应用程序,但是当我尝试这样做时,它在我的代码行中中断 (controller.js):

var appController = new MyController();

其中 MyController 看起来像:

var MyController = new Backbone.Marionette.Controller.extend({
    showItems: function(options) {
        this.collection = new MyCollection();
        var self = this;
        this.collection.fetch({
            success: function(options) {
                console.log("SUCCESS");
                var myView = new MyCollectionView({
                    collection: self.collection
                });
                options.region.show(myView);
            },
            error: function(options) {
                console.log("FAILED");
            }
        });
    }
});

并显示以下错误消息:

Uncaught TypeError: r.apply is not a function

如果我看到这个错误的详细信息,它会在 backbone-min.js(行1884 年)。

// The constructor function for the new subclass is either defined by you
// (the "constructor" property in your `extend` definition), or defaulted
// by us to simply call the parent constructor.
if (protoProps && _.has(protoProps, 'constructor')) {
  child = protoProps.constructor;
} else {
  child = function(){ return parent.apply(this, arguments); };
}

然后,看看这个,您可以看到错误是从我的代码开始的,如下图所示。

我试图将我的代码行更改为:

var appController = MyController();

它显示了同样的错误,但现在的区别是它只在 backbone.js 代码(同一行)中中断,这真的很奇怪。

Thanks Emile, I followed your instructions but now throws the following error in the backbone.marionette.js code:

backbone.marionette.js:19 
Uncaught TypeError: Cannot use 'in' operator to search for 'default' in undefined

错误很容易发现,因为它指向 Marionette code 中的以下行:

Radio = 'default' in Radio ? Radio['default'] : Radio;

这意味着 Radio 未定义。

来自Marionette download page

Backbone.Radio is required for Marionette.

花点时间阅读有关如何开始使用您要使用的每个库的文档。它真的会节省你的时间。

从模态中删除新关键字,仅在实例化模态时使用新关键字

var MyController = Backbone.Marionette.Controller.extend({
var appController = new MyController();