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