我试图制作一个基本控制器,以提供其他控制器可以扩展的一些通用功能,但是以某种方式,当我尝试扩展我的基本控制器时出现错误。

基本控制器

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实例,而不是您尝试用于extend 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();
});


这样,您的控制器模块将始终返回可再次用于extend的构造函数,而不是返回单个实例:

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

关于javascript - MarionetteJs范围基础 Controller ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23902629/

10-12 01:13