Javascript MarionetteJs扩展基控制器

Javascript MarionetteJs扩展基控制器,javascript,backbone.js,marionette,frontend,Javascript,Backbone.js,Marionette,Frontend,我试图制作一个基本控制器,它提供一些其他控制器可以扩展的通用功能,但在我尝试扩展我的基本控制器时,不知何故我遇到了一个错误 基本控制器 define(function (require) { var Marionette = require('marionette'); var BaseController = Marionette.Controller.extend({ initialize: function(options){ // Do stuff

我试图制作一个基本控制器,它提供一些其他控制器可以扩展的通用功能,但在我尝试扩展我的基本控制器时,不知何故我遇到了一个错误

基本控制器

define(function (require) {
  var Marionette = require('marionette');

  var BaseController = Marionette.Controller.extend({
    initialize: function(options){
      // Do stuff
    },

    // Other stuff
  });
  return new BaseController();
});
正在扩展的控制器

define(function (require) {
  var Marionette = require('marionette')
    , BaseController = require('controllers/base_controller')
    ;

  var MyController = BaseController.extend({
    // Do stuff
  });

  return new MyController();
});
错误:

Uncaught TypeError: undefined is not a function mycontroller.js line 6

可能我无法扩展控制器?

您需要从基本控制器文件的return语句中删除
new
&
()

return BaseController; // Remove the new && () here
使用
new BaseController()
调用返回一个
BaseController
实例,而不是您试图用来扩展
MyController的构造函数

您还应该考虑将它们从MyController文件中删除,然后在需要时创建新实例

例如:

// controllers/my_controller.js
define(function (require) {
    var Marionette = require('marionette')
    , BaseController = require('controllers/base_controller');

    var MyController = BaseController.extend({
    // Do stuff
    });

    return MyController;
});

// someotherfile.js
define(function (require) {
   var MyController = require('controllers/my_controller');
   var myControllerInstance = new MyController();
});
这样,控制器模块将始终返回可用于再次扩展的构造函数,而不是返回单个实例:

// controllers/my_awesome_controller.js
define(function (require) {
   var MyController = require('controllers/my_controller');
   var MyAwesomeController = new MyController.extend({
       // Extend more awesomeness
   });
   return MyAwesomeController;
});